为了账号安全,请及时绑定邮箱和手机立即绑定

强制转换问题 谢谢了!

强制转换问题 谢谢了!

慕姐8946757 2017-08-28 23:21:28
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);
}
}


查看完整回答
7 反对 回复 2017-08-29
?
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 

  • 强制类型转换:从右向左转换需要强制

   之后结合也有解答了,就不赘述了

  

查看完整回答
3 反对 回复 2017-08-29
?
onemoo

TA贡献883条经验 获得超454个赞

Java 中 int 型占 32 位,byte 占 8 位。Java 的整型间从长到短强制转型过程只是按位截断。

十进制数 130 其二进制表示的最后 8 位是 10000010。

转型为 byte 会从低地址位按位截断,也就是只保留最后的这 8 位: 10000010。

而 Java 中的整型是有符号数,第一位是符号位。符号位为 1 表示这是负数。负数用二进制补码表示,而 10000010 作为补码就表示十进制的 -126。

查看完整回答
3 反对 回复 2017-08-29
  • 慕姐8946757
    慕姐8946757
    还是不太懂啊 能说的仔细点吗?这个int强制转换为byte 是怎么回事?
  • onemoo
    onemoo
    你能说说你哪里没看懂吗?
  • 3 回答
  • 1 关注
  • 1741 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信