【发布时间】:2015-06-21 21:13:13
【问题描述】:
int16_t a = -1;
a >>= 2;
a的值是多少, 答案是 -1 还是 0,你能解释一下原因吗?
是否发生整数除法,然后使用 floor 函数,或者它只是将 2s 补码中的所有 1 向右移动,从而导致仍然为 -1 还是截断除法导致 0。
【问题讨论】:
-
为什么不运行代码看看?
-
因为我在 9 点参加笔试 tmrw 我的电脑上没有开发环境,哈哈
-
有符号整数右移的结果是实现定义的。它可能是算术或逻辑移位,具体取决于是否传播符号位。
-
@joelgoldstick:幸好他没有“运行代码并查看”。由于这是实现定义的行为,他会知道他的编译器是如何实现它的,但绝对不会知道其他编译器是如何实现它的。 “运行看看”可能是一个非常危险的工具!
标签: c bit-manipulation