-5 / 2 = -2
-5 >> 1 = -3
我从我的老师那里学到, >>1 通过2来除以一个数。这适用于正数但不适用于负数。有人可以解释一下吗?
谢谢
-5 / 2 = -2
-5 >> 1 = -3
我从我的老师那里学到, >>1 通过2来除以一个数。这适用于正数但不适用于负数。有人可以解释一下吗?
谢谢
0000 0000 0000 0101
= 5
变成
0000 0000 0000 0010
= 20000 0000 0000 0101
= 5
变成
0000 0000 0000 0010
= 21111 1111 1111 1011
= -5
变成
1111 1111 1111 1101
= -31111 1111 1111 1011
= -5
变成
0111 1111 1111 1101
= 32,7651111 1111 1111 1101
是-3,而不是-2。你在原问题中得到的结果是算术位移。逻辑位移是为什么你不应该在负数上使用 >> 位移的原因。我的帖子已经被编辑以修复错误。 - DaboyzukE1 >> E2的结果是将E1向右移动E2位。如果E1具有无符号类型或者E1具有带符号类型和非负值,则结果的值为E1 / 2E2商的整数部分。如果E1具有带符号类型和负值,则结果的值是实现定义的。
是与右移相关的部分。 - P.P现在我们得到了:-5= 1111 1111 1111 1011(以二进制补码形式表示)
因此,以下是如何计算-5>>1:
我猜-5>>1的答案是-3。
对于正数,比如5,除以2得到2.5,四舍五入到最接近的小整数即为2。
但是当我们考虑负数-5时,除以2得到-2.5。将其四舍五入到最接近的整数即为-3。
我认为答案是正确的。因为“/”(除法)运算符会生成商(除法的结果)。
-5/2 = -3(quotient) and 1(remainder ).
所以这对于正数和负数都可以。
5/2 = 2(quotient) and 1(remainder ).
所以对于正数来说是没问题的。
余数永远不会是负数。它总是正数。