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

它给出:-1 ffff

谁能解释一下?

4

1 回答 1

5

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

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

现在按位否定这个零(使用 bit to bit negation ~),你得到int位范围内的所有 1(这可能因编译器而异)

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

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

于 2017-12-16T09:36:23.987 回答