我在这个程序中很困惑x = 320的值...
#include<stdio.h>
int a=5;
int main(){
int x;
x=~a+a&a+a<<a;
printf("%d",x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
希望快速积极的回应..
实际上,如果你的实现使用整数的二进制补码编码,那只会给你320.原因是因为它被解释为:
(((~a) + a) & ((a + a) << a))
= -1 & (10 << 5)
= 10 << 5
= 320
Run Code Online (Sandbox Code Playgroud)
二进制补码中的-1都是1位,所以当你and使用任何东西时,你得到相同的值.
但是,使用一个补码,~a + a将给出零,以便最终结果为零.
ISO C标准允许对有符号整数进行二进制补码,一对补码和符号/幅度编码,这就是为什么这样的代码本来就不好的一个原因.