java_2018_Day7_面试题1

class mianshiti {
public static void main(String[] args){
//定义三个 byte类型的变量
//byte b1=3,b2=4,b;
//b1 byte类型 b2 byte类型
//两个 byte类型计算首先转换为int类型
//b=b1+b2; //可能损失精度 类型提升,编译失败
//b=3+4; //常量,先把结果计算过来,然后是否在byte范围内,如果在就不报错
//常量相加,首先做加法,然后看结果是否在赋值的数据类型范围内,如果不是,才报错.
//byte b = 130;//损失精度,byte 的范围是 -128 到 127 超出范围报错
byte b = (byte)140;
/*
分析过程
计算机的数据运算都是补码进行,而要得到补码,首先要计算出数据的二进制

int=130 //4个字节 128+2

130
1个字节8位

130是个整数 1个整数占4个字节

128 64 32 16 8 4 2 1
1 0 0 0 0 0 1 0

获取130这个数据的二进制
00000000 00000000 00000000 10000010
↑ 这是130 的源码 反码 补码

做截取操作,截成byte类型
10000010
这个结果是补码
已知补码求源码
符号位 数值位
补码: 1 0000010
反码: 1 0000001
源码: 1 1111110= -126 11111111 = 127

140
128 64 32 16 8 4 2 1
1 0 0 0 1 1 0 0

补码 1 0001100

反码 1 0001011
源码 1 1110100
-54


*/

System.out.println(b);
}
}

猜你喜欢

转载自www.cnblogs.com/dlbm/p/9159721.html