class BinaryTest{
public static void main(String[] args){
int intNumber=128;//定义一个int的值
byte byteNumber=(byte)intNumber;//将int值转换为byte类型
System.out.println(byteNumber);
}
}
运行结果:

知识铺垫:
| 数据类型 | 字节大小 | 多少位二进制数 | 二进制位数含义(第一位从0开始) |
|---|---|---|---|
| int | 4个字节 | 32位二进制数 | 第0位到第30位是数字位,第31位是符号位 |
| byte | 1个字节 | 8位二进制数 | 第0到第6位是数字位,第7位是符号位 |
| 类型 | 正数 | 负数 |
|---|---|---|
| 原码 | 将数字转换为二进制,即得到源码 | 将对应的整数的符号位改为1即得到该负数的原码 |
| 反码 | 反码与源码相同 | 将对应的原码除符号位(最高位)外,其余为全部取反(0变1,1变0) |
| 补码 | 补码与反码相同 | 将对应反码,在末尾加1,即得到补码 |
注意:在计算机底层,都是以补码的形式进行存储的。
有了上面的知识铺垫,接下来给大家分享,其中的缘由:
1、将int类型的常量128转换为二进制为:
| 第24位到第31位 | 第16位到第23位 | 第8位到第15位 | 第0位到第7位 |
|---|---|---|---|
| 00000000 | 00000000 | 00000000 | 10000000 |
2、将int类型的常量,强制转换为byte类型,则从32位变成了8位,则砍掉高24位,则转换后的二进制为:
| 第0位到第7位 |
|---|
| 10000000 |
3、因为正数127的原码是:0111 1111,则-127的原码是1111 1111
(将对应的整数的符号位改为1即得到该负数的原码)
4、-127的反码是:1000 0000
(将对应的原码除符号位(最高位)外,其余为全部取反(0变1,1变0))
5、-127的补码是:1000 0001
(将对应反码,在末尾加1,即得到补码)
6、-128的补码是:1000 0000
(-127在减去1等于-128)
根据计算机证明

感谢您的帮助,希望这篇文章对你有帮助!

本文深入探讨了Java中int类型转换为byte类型的过程,详细解释了正数128转换为byte后变为-128的原因,涉及二进制表示、原码、反码和补码的概念。
3584





