有人能帮我解释一下这行代码的含义吗?

标签 c

我想知道这段代码的真正含义。我的意思是,我想知道它的作用、顺序以及 ?: 符号的含义;一切都已解释。

printf(" %c", ((sq & 8) && (sq += 7)) ? '\n' : pieces[board[sq] & 15]);

谢谢。

最佳答案

  • 第一个参数“%c”表示 printf 需要打印出一个字符。
  • 第二个参数是函数打印的字符。
  • 在本例中,第二个参数是 ternary operator 。您可以阅读提供的链接,但简而言之,它基本上是 if-else block 的简写。这就是您的示例中的样子:

    ((sq & 8) && (sq += 7)) ? '\n' : pieces[board[sq] & 15]
    

让我们将其分为三个部分:

  1. ((sq & 8) && (sq += 7))

  2. '\n'

  3. 件数[板[sq] & 15]

第一部分是条件(if);

  • 此表达式 (sq & 8) 使用所谓的按位 AND 运算(了解更多 here )。基本上,二进制中的 8 是 1000,该部分检查 sq 在该位置是否有 1(可以是 1000、11000、101000 等);如果是,则该表达式等于 8(任何大于零的数字都表示 true),如果不是,则等于 0(表示 false)。
  • && 表示 AND,只是表示左右表达式都必须为 true
  • sq += 7 会将 7 添加到 sq,如果不为 0,则为 true。

如果条件为真,则返回第二部分\n(在您的情况下打印出来);否则第三部分将被打印出来(pieces[board[sq] & 15])。

关于有人能帮我解释一下这行代码的含义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59022474/

相关文章:

c++ - 掩蔽和转移

c++ - 用于 python 列表的 SWIG typemap to double *

c - 双指针的方框和圆图?

c - 在 C 中初始化 const 变量

c++ - C 结构中的内存对齐

c - LabView 与 WM_Copydata 的通信

c - 初始化使指针来自整数,无需进行强制转换以及指针与整数之间的比较

c - 文本伴侣 2 : errors when trying to compile and run a simple C program

python - 从分配的数组在 C 中创建一个 numpy 数组会导致内存泄漏

当第一个字段未对齐时在 C 中转换结构