int类型的按位运算

时间:2015-02-10 21:11:41

标签: c bitwise-operators

我有以下代码:

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.这可能是一个愚蠢的问题,但我无法意识到我做错了什么。

3 个答案:

答案 0 :(得分:4)

您将原始数字降低1,而不是升档操作的结果。您的计划中没有任何作业,因此x永远不会更改价值。

答案 1 :(得分:4)

>><<未修改x,因此每次换班都是在相同的值上执行,而不是前一次换档的结果。如果您想保留上一班次的结果,您应该执行相同的x= x<<2x<<=2作业。

答案 2 :(得分:1)

也许您的意思是使用此运算符<<=,它将同时移位并分配结果,因此必须正常工作

int x = 1340;
printf("%d\n", x <<= 2);
printf("%d\n", x >>= 1);

<<>>运算符本身不会修改x的值。