【发布时间】:2013-06-21 00:13:21
【问题描述】:
所以,假设我有一个有符号整数(几个例子):
-1101363339 = 10111110 01011010 10000111 01110101 in binary.
-2147463094 = 10000000 00000000 01010000 01001010 in binary.
-20552 = 11111111 11111111 10101111 10111000 in binary.
现在:例如-1101363339 >> 31,应该等于 1 对吧?但在我的电脑上,我得到-1。如果 x = 负数,无论我选择什么负整数,x >> 31 = -1。为什么?显然在二进制中它应该是 1。
【问题讨论】:
-
很确定这仍然是 C 中未定义的行为。也就是说,对于其他系统会发生什么没有硬性规定。
-
@cHao 我记得听说是否要进行移位算法取决于实现,但是大多数人选择这样做
-
@aaronman:是的,显然标准(或我的草案副本,至少)说它是实现定义的。哎呀。 :)
-
如果你想用它作为分支优化或其他东西的测试,只需在之后屏蔽它:
(x >> 31) & 1。或者更好的是,将其视为未签名:(unsigned)x >> 31. -
@paddy:或者使用
(x < 0)。
标签: c