-5 / 2 = -2
-5 >> 1 = -3
我从我的老师认为>> 1由2分数它适用于正数,但它不负数工作学习。 谁能给我解释一下?
谢谢
-5 / 2 = -2
-5 >> 1 = -3
我从我的老师认为>> 1由2分数它适用于正数,但它不负数工作学习。 谁能给我解释一下?
谢谢
作为BЈовић&神秘状态,使用比特移位操作符上的负数被实现定义。
这样做的原因是C不逻辑和算术比特移位之间进行区分。
(算术垫最显著位,逻辑垫用0)
为正数,这并不重要,对于算术和逻辑位移位将保持最显著位为0:
算术5 >> 1
0000 0000 0000 0101
= 5
至
0000 0000 0000 0010
= 2
逻辑5 >> 1
0000 0000 0000 0101
= 5
至
0000 0000 0000 0010
= 2
然而用负号(2的COMP)
算术-5 >> 1
1111 1111 1111 1011
= -5
至
1111 1111 1111 1101
= -3
逻辑-5 >> 1
1111 1111 1111 1011
= -5
至
0111 1111 1111 1101
= 32765
或者至少,我是这样理解
它适用于正数,但它不负数工作。
在负整数使用移位运算符是实现定义。
[expr.shift] / 3告诉此:
E1 >> E2的值E1右移E2位的位置。 如果E1有一个无符号类型,或者E1具有符号类型和一个非负的值,则结果的值是E1 / 2E2的商的整数部分。 如果E1有一个签名的类型和为负值,所得到的值是实现定义。
首先,
5二进制是0000 0000 0000 0101但什么-5? 这里是 :
现在,我们得到:-5 = 1111 1111 1111 1011(它在2的补码形式)
因此,这里是如何计算-5 >> 1:
我从我的老师认为>> 1除以2号学习。
它不除以二的整数,但它执行(取决于值) 逻辑或算术移位一个位到右侧。 它发生两个在某些情况下等于一个部门。
它适用于正数,但它不负数工作。
它的工作原理在这两种情况下,但具体行为不是由标准的规定,而是实现定义。 它通常由两部分并截断结果向负无穷,在constrast朝着零作为一个正常的分工会做。
以供参考:
我认为答案是正确的。 如“/”(除法)运算产生商数(除法的结果)。
-5/2 = -3(quotient) and 1(remainder ).
因此,这是确定有正反两方面的数字。
5/2 = 2(quotient) and 1(remainder ).
因此,它是罚款与正数。
其余永远是负数。 它始终是正数。
我想答案>> -5 1 = -3。 在正数的情况下,说5,通过2分割给出2.5四舍五入为最接近的最小整数即2
但是,当我们考虑一个负数,-5,除以2给出了-2.5。 其四舍五入到最接近的整数给出-3。
在c向右移位运算保留符号bit.hence移位比特与保留符号位右侧再次产生一个负数,这是两个互补形式。