Java中byte数据类型范围为何是(-128到127)
知识要点
- byte在java中转为二进制有8位长度
- 二进制的最高位是符号位
- byte数据类型取值范围为(-128到127)
关键词解析
8位
就是字面的意思,比如0000 0000就是占了8位
符号位
即根据第一位二进制位来判断此二进制数是正数还是负数,如果此二进制第一位是0,就代表这个二进制就是一个正数,是1就是负数
下面我们使用编译器来验证结果
-128
public class HelloWorld {
public static void main(String []args) {
byte a = -128;
//使用下面的byte转换二进制字符串
String b = getBinaryStrFromByte(a);
System.out.println(b);
}
public static String getBinaryStrFromByte(byte b){
String result ="";
byte a = b; ;
for (int i = 0; i < 8; i++){
byte c=a;
a=(byte)(a>>1);//每移一位如同将10进制数除以2并去掉余数。
a=(byte)(a<<1);
if(a==c){
result="0"+result;
}else{
result="1"+result;
}
a=(byte)(a>>1);
}
return result;
}
}
可以验证得知,我们的第一位就是符号位1代表负数,如果byte占9位的话,那么正确的写法应该是1100 0000 0,但是byte最大8位,所以我们不能使用“正确”的写法
这也使得本来128应该表示为1000 0000的冲突数被剔除,byte最大位只能是127,使byte范围为(-128到127)
127
很显然,8位的byte位最大只能装下正127
本文含有隐藏内容,请 开通VIP 后查看