Java学习,day02: 数据类型强制转换问题
code:
class DataTypeDemo{
public static void main(String args[]){
byte b = (byte)130;
byte c = (byte)300;
System.out.println(b);
System.out.println(c);
}
}
result:
-126
44
默认数据类型为 int 为8个字节
130 = 128 + 2:00000000 00000000 00000000 10000010
强制转换为byte类型:截取低8位后为 1 0000010(补)—— 1 0000001(反)—— 1 1111110(原)—— -126
300 = 256 + 32 + 8 + 4:00000000 00000000 00000001 00101100
强制转换为byte类型:截取低8位后为 0 0101100(补)—— 0 0101011(反)—— 0 1010100(原)—— 84
并不是运行结果中的44
这是为啥???
总结:错误的地方已经标红
1.300强制转换类型后,符号位(第一位)0,说明是正数,正数的原反补一样,
所以0 0101100(补)—— 0 0101100(反)—— 0 0101100(原)—— 44
2.截取后,注意符号位
3.确定符号之后才能进行原反补转化,切记切记!