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)
根据计算机证明
感谢您的帮助,希望这篇文章对你有帮助!