package com.heima;public class Demo4 { public static void main(String[] args) { int num = 130; byte x = (byte) num; System.out.println(x); }}请问这段代码打印为什么是-126;者个强制转换byte取值不是-128~127吗? 为什么回事-126啊 解释下 谢谢!
3 回答
已采纳
望远
TA贡献1017条经验 获得超1032个赞
//这里涉及到二进制与十进制转化的问题 并且Java中int占4个字节,byte占1个字节,在通过int强转为byte时会发生截断,导致数据失真,这里就是这个问题
public class Demo4 { public static void main(String[] args) { //num是int类型数据,占32位 //即 00000000 00000000 00000000 10000010 int num = 130; //这里尝试将num强转为byte类型,而byte只有8位,发生截断,取后8位 //即10000010 舍弃了前面24个0 byte x = (byte) num; //那么二进制10000010表示的10进制是多少? //java中数据的表示采取的是补码的形式,即最高位表示符号位,1为负,0为正 //那到底是表示负几? //这就要将补码转化为原码 //补码转原码--负数(符号位为1的数)变为原码时符号位不变,其余各项取反,最后在末尾+1 即补码10000010 --> 原码11111110 //原码11111110表示十进制多少? //最高位1表示负数,低7位1111110表示十进制126,即原码11111110表示十进制-126 System.out.println(x); } }
qq_安安_17
TA贡献49条经验 获得超52个赞
public class Demo4 { public static void main(String[] args) { int num = 130;//定义一个num为int型 byte x = (byte) num; //把num强制转化为byte型后,将结构传递给一个新定义的byte型的x System.out.println(x); } }
你是不是不知道强制转换啊?答案已经十分详细了,为什么没看懂呢?
Java语言是一种强类型的语言。数据直接的转换有两个:
自动类型转换:从存储范围小的类型到存储范围大的类型。 具体规则为:
byte→short(char)→int→long→float→double强制类型转换:从右向左转换需要强制
之后结合也有解答了,就不赘述了
onemoo
TA贡献883条经验 获得超454个赞
Java 中 int 型占 32 位,byte 占 8 位。Java 的整型间从长到短强制转型过程只是按位截断。
十进制数 130 其二进制表示的最后 8 位是 10000010。
转型为 byte 会从低地址位按位截断,也就是只保留最后的这 8 位: 10000010。
而 Java 中的整型是有符号数,第一位是符号位。符号位为 1 表示这是负数。负数用二进制补码表示,而 10000010 作为补码就表示十进制的 -126。
添加回答
举报
0/150
提交
取消