我想做左移但是填零,就像
一样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;运营商。那我该怎么做呢?
答案 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