...并带入 0。
例如:
1111 0110 >> 2
给
11 1111 01
根据一些笔记。
为什么要引入 1?为什么不把最左边的位保持在 1 并带入 0?
移动到正确的位置不是像除以 2 一样吗?如果是这样,不应该带入0吗?
...并带入 0。
例如:
1111 0110 >> 2
给
11 1111 01
根据一些笔记。
为什么要引入 1?为什么不把最左边的位保持在 1 并带入 0?
移动到正确的位置不是像除以 2 一样吗?如果是这样,不应该带入0吗?
您希望右移与除以 2 相同。假设这是一个有符号的 8 位量,则为-128
:
1000 0000
这是-64
:
1100 0000
所以这是你建议的反例。
它被称为“符号扩展”,它的存在正是为了产生除以二的效果。如果最左边的位变为 0,则原来负数的符号将变为正数。如果只有最左边的位保持为 1,而后面的位变为 0,则结果与除以 2 无关。
如果您希望在左侧添加零,则有一个特殊的运算符:>>>
.
注意 Java 只有一个无符号整数,它是char
. 在这种数据类型上,>>
通过在左侧添加零来工作。