Sit*_*Roy -8 c printf ones-complement
int x = ~!printf;
printf("%d\t%x",x,x);
Run Code Online (Sandbox Code Playgroud)
它给出:-1 ffff
谁能解释一下?
printf没有参数的是函数指针,值得一个非零值(它是内置的,因此指针不能为零)
现在,您!对此非零值应用逻辑否定():得到零.
现在否定这个零位(使用位到位否定~),你得到int位范围内的所有1 (这可能因编译器而异)
以十进制数打印-1,十六进制产生给定数量的fs,具体取决于整数的大小(在我的32位整数编译器上,我得到ffffffff)
(注意 - 特别是函数指针的否定 - 不能是某些有效程序的一部分,这仅用于学术目的)