printf("%c\n",~('C'*-1)) 在 c 中是如何计算的?

Sow*_*ran 4 c

#include<stdio.h>
int main()
{
printf("%c\n",~('C'*-1));
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了上述源代码并在没有任何警告的情况下执行。

输出为B。我很兴奋上面的代码是如何处理的以及 printf("%c\n",~('C'*-1))

Yu *_*Hao 5

在 C 中,'C'是 an int,它是一个小整数,其值为67(假设为 ASCII)。您可以从以下位置获取每一步:

#include<stdio.h>
int main()
{
    printf("%d\n", 'C');            //67
    printf("%d\n", 'C' * -1);       //-67
    printf("%d\n", ~('C' * - 1));   //66
    printf("%c\n",~('C' * -1));     //B
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在2的补,价值~(-67)66

  • 在二进制补码处理器上。 (2认同)

Joh*_*nck 5

唯一重要的部分是这个表达式:

~('C' * -1)
Run Code Online (Sandbox Code Playgroud)

让我们分解一下:

  • 'C'ASCII码 67。
  • ('C' * -1) 是 -67。
  • -67 在二进制中是 10111101
  • 按位否定(使用~),你有 01000010,即 66。
  • 66 是 'B' 的 ASCII 码。

更一般地,大多数计算机使用“二进制补码”算术,其中数字求反和按位求反等效于减 1。当然BCASCII少 1 。

在不使用二进制补码算法的计算机上,结果可能不同。这样的电脑很少见。