>> 与 >>>

>> 是逻辑右移

>>> 是算术右移

逻辑右移和左移, 空位都是补0, 右移,空的高位补0, 左移,空的低位补0。可以认为输入都看作无符号数。

算术右移,高位补符号位,左移,低位补0。
但有一点要注意,高位补的是符号位。

所以如果一个32bit数 32‘hA0A0_FAFA;
如果把这个数值赋给一个int型变量, 符号位为1, 那么算术右移,高位是补1的;
如果这个数值是赋给了一个bit【31:0】变量,这是一个无符号数,尽管最高位是1,但bit【31:0】的变量永远是一个非负数,认为符号位是0。所以,即使是>>>算术右移,高位仍然是补0的。

逻辑右移和左移的 第二个操作数,不要是负数,不然结果会是0.

算术左移的第二个操作数,如果是负数,结果是0.
算术右移的第二个操作数,如果是负数,如果第一个操作数是int型,有符号数,结果不是0.
int a=‘hA0A0_FAFA
a = (a >>> -4)
结果是{28'hfff_ffff, 4'hA}, 4‘hA是高位的4bit A。
int a=‘h0A0A_FAFA
a = (a >>> -8)
结果是{24'h0, 8'h0A}, 8‘h0A是高位的8bit 0A。

不管怎么样,保证第二个操作数不要为负数,就不会出现意想不到的结果。同时记得第一个操作数的类型和符号位。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容