c 语言不太理解说的右移和左移的情况。能举个例子解释下那吗。就是左移动高位低位。右移无符号。负整数

c 语言不太理解说的右移和左移的情况。能举个例子解释下那吗。就是左移动高位低位。右移无符号。负整数,第1张

左移时左端高位移出的部分舍弃是啥意思。还有右移时负整数高位补一是啥意思??
解答:正数在存储的时候就是原数字,但是负数要采取补码的方式存储。这样,负数的最高位就是1。比如:对于32位的系统int为四个字节,共32位,数字1就是0xffffffff(即-1的补码,最高位是1)。
对于0xffffffff 已经占满的32个位,左移时,高位全部舍去不要,低位补0比如左移4位就变成 0xfffffff0。但是右移就不一样了,右移时,低位舍去,高位补1,(原来的最高位就是1),所以右移四位还是 0xffffffff ,而不是 0x0fffffff。

在数据不溢出的情况下,<<1相当于乘以2,>>1相当于除以2。-5>>2就相当于-5除以2再除以2,这是个整型,所以-5/2得-2,再除以2就得-1了。当然如果转为二进制再平移更容易理解。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12732894.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-27
下一篇 2023-05-27

发表评论

登录后才能评论

评论列表(0条)

保存