我想左移,但用零填充,就像一样
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