我有以下代码:
int x = 1340;
printf("%d\n", x << 2);
printf("%d\n", x >> 1);
1340二进制数是:
00000000|00000000|00000101|00111100
因此,根据我的理解,第一次打印应该是等价的整数:
00000000|00000000|00010100|11110000
这是5360,这是正确的,但是秒打印应该是等于
的整数00000000|00000000|00001010|01111000
当我计算它时,我认为它打算打印2680,但是当我运行该程序时,它打印670.这可能是一个愚蠢的问题,但我无法意识到我做错了什么。
答案 0 :(得分:4)
您将原始数字降低1,而不是升档操作的结果。您的计划中没有任何作业,因此x
永远不会更改价值。
答案 1 :(得分:4)
>>
和<<
未修改x,因此每次换班都是在相同的值上执行,而不是前一次换档的结果。如果您想保留上一班次的结果,您应该执行相同的x= x<<2
或x<<=2
作业。
答案 2 :(得分:1)
也许您的意思是使用此运算符<<=
,它将同时移位并分配结果,因此必须正常工作
int x = 1340;
printf("%d\n", x <<= 2);
printf("%d\n", x >>= 1);
<<
或>>
运算符本身不会修改x
的值。