2
#include<stdio.h>
  int main() {
  int x;
  x=~!printf;
  printf("%x",x);
}

有人可以向我解释得出该程序输出的过程吗?

4

1 回答 1

8
  • printf是指向printf函数的指针 - 因此它最终是某种整数。
  • !是一元 NOT,这意味着0如果操作数为真则返回,并且1is 操作数为假。由于printf为真(非零,因为函数已定义),所以到目前为止的子表达式为0.
  • ~是按位补码。它翻转给出的二进制数的所有位。既然给定了0,这将返回0xffffffff
  • 然后将该结果以十六进制存储x并打印出来。

在 64 位机器上,您可能会得到0xffffffffffffffff,尽管我不完全确定。

于 2013-07-25T17:10:08.540 回答