gpt4 book ai didi

c++ - 正数和负数的位运算符

转载 作者:可可西里 更新时间:2023-11-01 17:35:33 25 4
gpt4 key购买 nike

    -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's comp)
算术-5>>1
1111 1111 1111 1011 = -5

1111 1111 1111 1101 = -3

逻辑-5>>1
1111 1111 1111 1011 = -5

0111 1111 1111 1101 = 32,765

至少,我是这样理解的

关于c++ - 正数和负数的位运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13858655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com