如何评估以下c程序?

时间:2013-07-25 17:04:53

标签: c

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

有人可以向我解释导出该程序输出的过程。

1 个答案:

答案 0 :(得分:8)

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

在64位计算机上,您可能会获得0xffffffffffffffff,但我并不完全确定。