class Data{
public static void main(String[] args) {
byte a=(byte)130;
System.out.println(a);//答案:-126
}
}
计算这个题我们首先要明白一个原则(源码补码反码的相互转换)
- 正数:源码反码补码都一样
- 负数的源码反码补码转换原则:
- 源码–反码:符号位不变,其余各位由0–1,1–0相互转换
- 反码–补码:符号位不变,在反码的基础上进行加一操作
- 130本身是一个int类型的整数(byte整数范围(-128-127))
- 将130强制转换为byte类型需要进行截取操作
- 以下就是计算方法:
- int类型的数占4个字节,每个字节又占8位 如下:
- 130的二进制数为
- 00000000 00000000 00000000 10000010 这既是130的源码也是反码还是补码 (正数)
- 强制转换进行截取操作
- char类型的数占一个字节,每个字节8位 截取出byte类型(从左往右截取字节,只留下一字节就是130byte类型的补码)
- 所以为 :10000010这个结果是补码(我们得将这个数转换成源码就是我们所想得到的数)
-
补码: 1 0000010
-
符号位 数值位
-
反码 1 0000001(补码--反码符号位不变,在补码的基础上减一)
-
符号位 数值位
-
源码 1 1111110(反码--源码符号位不变,在反码的基础上各位由0--1,1--0相互转换)
-
符号位 数值位
-
所以可以得出int类型正数130强制转换成char类型整数值为-126