java的移位运算

">>>"逻辑右移,左边添加0

注意 char,byte和short在逻辑右移时会先转换成int,然后在int的基础上逻辑右移。

long型的移位

long型移位很诡异,不知道怎么回事,

        long l = -21474837000L;
        System.out.println(l);
        BitManipulation.pBinLong("l", l);
        l >>>= 3;
        System.out.println(l);
        BitManipulation.pBinLong("l", l);

1111111111111111111111011111100011111111111111111111110111111000

1101111111111111111111111011111111011111111111111111111110111111

如果, l 赋值时为一个int范围内的数,貌似前后32个bit内容一样, 移位也是基于32位移, 前后32位各自分别右移3位

而,如果l赋值为超过int范围的值时, 不知道怎么移位的, 如上例好像在逻辑右移3位, 好像在前后各个32位前移进来110;

而且, 不管逻辑右移还是右移, 得到的二进制数一样, 但是逻辑右移后的数 会解释成无符号数。

why


posted @ 2011-08-04 09:49  lidan  阅读(262)  评论(0编辑  收藏  举报