美文网首页
>> 与 >>>

>> 与 >>>

作者: Poisson_Lee | 来源:发表于2019-06-23 11:46 被阅读0次

    >> 是逻辑右移

    >>> 是算术右移

    逻辑右移和左移, 空位都是补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。

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

    相关文章

      网友评论

          本文标题:>> 与 >>>

          本文链接:https://www.haomeiwen.com/subject/zkjiqctx.html