这段代码在C中意味着什么,“int x =〜!printf;”?

时间:2017-12-16 09:27:50

标签: c printf ones-complement

int x = ~!printf;
printf("%d\t%x",x,x);

它给出:-1 ffff

任何人都可以解释一下吗?

1 个答案:

答案 0 :(得分:5)

没有参数的

printf函数指针,值得一个非零值(它的内置所以指针不能为零)

现在你对这个非零值应用逻辑否定(!):你得零。

现在否定这个零位(使用位到位否定~),你得到int位范围内的所有1(根据编译器的不同而不同)

以十进制格式打印-1,十六进制产生给定数量的f s,具体取决于整数的大小(在我的32位整数编译器上,我得到ffffffff

(注意 - 特别是函数指针的否定 - 不能是某些有效程序的一部分,这仅用于学术目的)