【发布时间】:2019-09-06 11:26:55
【问题描述】:
我正在研究按位运算和有符号数表示。我已经认识到,如果我们在补码模式上进行左移。它没有正确地乘以原始数字。
例如(反码):
11100101 (-26) << 1 = 11001010 (-53)
11110100 (-11) << 2 = 11010000 (-47)
-26 左移 1 位给出 -53(不是 -52),-11 左移 2 位给出 -47(不是 -44)。这就是人们选择二进制补码进行精确数字运算的原因。我在谷歌上搜索过,但没有提到左移和补码的帖子。几乎提到了带补码的左移
【问题讨论】:
-
在 C 和 C++ 中,这根本不重要。如果左移一个负数,则行为未定义。
-
谢谢,所以在C或C++中,不支持左移负数,右移
标签: binary bitwise-operators bit-shift negative-number ones-complement