若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。为什么只有数值右端的低5位才有用?
若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。为什么只有数值右端的低5位才有用.
解释:
class AAA {
public static void main(String[] args){
byte a=127;
System.out.println(Integer.toBinaryString(a));
System.out.println(a);
a<<=2;
System.out.println(Integer.toBinaryString(a));
System.out.println(a);
byte b=127;
System.out.println(Integer.toBinaryString(b));
System.out.println(b);
System.out.println(Integer.toBinaryString(b<<2));
System.out.println(b<<2);
}
}
运行结果:
1111111
127
11111111111111111111111111111100
-4
1111111
127
111111100
508
解答一:a的执行过程 先将 byte型的数 127变成int型,左移2位得到 508,然后把508赋给byte型变量a时只是简单地折断(损失精度)得到-4。
为什么只有数值右端的低5位才有用.?请大家帮我解释这一句。
------解决方案--------------------int类型是32位也就是2的5次幂
如果你移32位以上,那么原来的数的信息会全部丢失,这样也就没有什么意义了