Java左移并填充Zeros

时间:2014-08-30 11:02:51

标签: java bit-shift

我想做左移但是填零,就像

一样
int number = 20 >>> 10 = ( 0000 0000 0000 0000 0000 0000 0001 0100 ) 
int number = 20 >>> 32‎ =  ( 0000 0000 0000 0000 0000 0000 0000 0000 )

我想对左移做同样的事情,因为没有运算符<<<对于leftshift

int number = 20 << 32 = 0000 0000 0000 0000 0000 0000 0001 0100 ;

我想用零填充它,就像&gt;&gt;&gt;运营商。那我该怎么做呢?

2 个答案:

答案 0 :(得分:13)

<<左移操作符将根据您的需要输入零。

有两个右移运算符(>>>>>)的原因是因为在2的补码形式中,负数在最左位位置的位值为1 。右移操作符>>将添加符号位(如果是负数则为1,而在正数或零时为0则为另一个({{ 1}})将始终添加零。

两个右移操作员都可以使用。

语言规范指出,如果位移运算符在>>>上应用,因为它是32位长,只有5位最低位用于确定移位数的次数。

因此,如果你用二进制中的int移动32,它相当于移0,这意味着不要移位!如果你想移动一个64位100000,那么最低6位只用于表示移位的次数。

答案 1 :(得分:0)

您需要使用long类型并且仅使用最低32位。 使用和运算符来实现这一目标。

    long intMask = 0x00000000FFFFFFFFL;
    long x = 0x00000000FFFFFFFFL;
    x = x<<32;
    int xi = (int)(x & intMask);
    System.out.println("xi=" + xi); //Result will be 0

请参阅问题:Declaring an unsigned int in Java