#include<stdio.h>
int main()
{
printf("%c\n",~('C'*-1));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了上述源代码并在没有任何警告的情况下执行。
输出为B。我很兴奋上面的代码是如何处理的以及 printf("%c\n",~('C'*-1))
在 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。
唯一重要的部分是这个表达式:
~('C' * -1)
Run Code Online (Sandbox Code Playgroud)
让我们分解一下:
'C'是ASCII码 67。('C' * -1) 是 -67。~),你有 01000010,即 66。更一般地,大多数计算机使用“二进制补码”算术,其中数字求反和按位求反等效于减 1。当然B比CASCII少 1 。
在不使用二进制补码算法的计算机上,结果可能不同。这样的电脑很少见。
| 归档时间: |
|
| 查看次数: |
1370 次 |
| 最近记录: |