Java左移并用零填充



我想左移,但用零填充,就像一样

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

我想对左移也这样做,因为没有运算符<lt<用于左移

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

我想像>>运算符一样用零填充它。那么我该怎么做呢?

<<左移运算符将根据您的需要引入零。

之所以存在2个右移运算符(>>>>>),是因为在2的补码形式中,负数在最左边的比特位置具有1的比特值。右移算子>>将在左侧添加符号位(在负数的情况下为1,在正数或零的情况下是0),而另一个(>>>)将始终添加零。

两个右移操作器都有自己的用途。

语言规范规定,如果对int应用移位运算符,因为它是32位长的,则仅使用最低的5位来确定数字移位的次数。

所以,如果你移动32,这是二进制的100000,它相当于移动0,这意味着不移动!如果你想移位一个64位的long,那么最低的6位只用来告诉你要移位多少次。

您需要使用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

请参阅问题:在Java 中声明无符号int

最新更新