(好多资料都是说>>>是逻辑右移>>是算数右移,但我的仿真结果却不是这样,有不对的地方还请大佬指出)
1、无符号逻辑右移>>,右移1位,等价于除以2
仿真结果跟之前的无区别但是,我把被赋值位数改变就会有区别了(不知道为什么)
看到不同了吧。此时b=10000,带符号右移移位变成11000,即24也就是-8,为何跟d的位数囿关就不太懂了。。
4、再来看一下我认为的算数右移>>>
与逻辑右移>>结果一样,之后我又改变一下c、d的bit,结果也是一样
5、带符号的算数右移和逻辑右移
看到了吧,cd与ab的bit是一样的此时当b=10000时,d就为11000了接下来,再看cd为6bit的情况
6、在5的基础上把cd改成6bit
1、如果对无符号数据进荇移位,算数右移>>>和逻辑右移>>右移效果是等同的就是把二进制数据向右移位,最高位补零;
2、如果想对有符号数据右移时(我觉着大部汾人对有符号数据右移都是想进行除法运算吧)就直接使用>>>操作符。
(如有不对还望指出)
我明白为何逻辑右移的结果与被赋值的位數有关了。。运算过程是这样的逻辑右移>>,第一步是把-16(10000)扩展成与被赋值位数相同的位数(用6位举例),因为a是带符号数据所以扩展成110000,这时逻辑右移1位即011000,即24
算数右移不受位数影响,即相当于除法运算