强制转换问题 谢谢了!

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啊 解释下 谢谢!

慕姐8946757
浏览 1794回答 3
3回答

望远

//这里涉及到二进制与十进制转化的问题 并且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

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

Java 中 int 型占 32 位,byte 占 8 位。Java 的整型间从长到短强制转型过程只是按位截断。十进制数 130 其二进制表示的最后 8 位是 10000010。转型为 byte 会从低地址位按位截断,也就是只保留最后的这 8 位: 10000010。而 Java 中的整型是有符号数,第一位是符号位。符号位为 1 表示这是负数。负数用二进制补码表示,而 10000010 作为补码就表示十进制的 -126。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java