【发布时间】:2017-10-15 06:00:41
【问题描述】:
在这段代码中:
unsigned short int i = 3;
unsigned short int x = 30;
unsigned short int z = (~x) >> i;
在第三行,它似乎首先进行移位,然后是补码 (~),即使我使用括号也是如此。
但是,如果我将short 替换为long,则不会出现奇怪的结果。
它发生在 Windows 和 Unix 中。这是为什么呢?
【问题讨论】:
-
请解释是什么让你这么认为。
-
你打印了中间结果 ((~x) , (x>>3), (~x)>>3, ~(x>>3) 吗?它们是什么?
-
~运算符是 not 否定的,没有人这样引用它。它是按位补码运算符。 -
您需要了解的是,补码和移位操作是在全尺寸整数上执行的,而不是短裤。然后将结果剪裁以适合短片。这就是为什么你没有得到你期望的结果。
-
非常感谢您的回答。你帮了大忙!
标签: c bitwise-operators shift short