整型转换

ty_zxf 2016-09-03 01:11:44

public class diff{
public static void main(String[] args) {
int i1 = 500;
byte i2 = (byte)(i1/2);
System.out.print(i2);
}
}


为什么强制转换后输出结果是-6
...全文
294 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
i1/2值为250,二进制码为11111010,强制转换为byte类型,byte8位二进制码的首位为符号位,所以11111010为一个负数,按补码规则,除符号位外各位取反加一,所以就成了-0000110就是-6。
dzq584462393 2016-09-03
  • 打赏
  • 举报
回复
i1/2 = 250,二进制为00000000,00000000,00000000,11111010,转换成btye,会变成11111010,高为是1,则为负数,负数转成10进制 1:取反,11111010取反00000101 2:加1,00000101+1 = 00000110 是6 则为-6
sean_0xiao 2016-09-03
  • 打赏
  • 举报
回复
引用 1 楼 shizhiailian 的回复:
这可不是整型之间的转换哦,int和byte强制转换会有位数丢失,数字范围超出-128—127,就会循环类在此范围内。 byte 是字节数据类型 ,是有符号型的,占1 个字节;大小范围为-128—127 。int是整型数据类型,是有符号型的,占用4个字节,大小范围为:-2147483648到2147483647。
由大范围向小范围转换,如果超出了范围,可能会造成溢出。
爱美有喜 2016-09-03
  • 打赏
  • 举报
回复
这可不是整型之间的转换哦,int和byte强制转换会有位数丢失,数字范围超出-128—127,就会循环类在此范围内。 byte 是字节数据类型 ,是有符号型的,占1 个字节;大小范围为-128—127 。int是整型数据类型,是有符号型的,占用4个字节,大小范围为:-2147483648到2147483647。
java_lgb1990 2016-09-03
  • 打赏
  • 举报
回复
其实就是溢出了 关于字节的范围
nikyotensai 2016-09-03
  • 打赏
  • 举报
回复
引用 2 楼 sean_0xiao 的回复:
[quote=引用 1 楼 shizhiailian 的回复:] 这可不是整型之间的转换哦,int和byte强制转换会有位数丢失,数字范围超出-128—127,就会循环类在此范围内。 byte 是字节数据类型 ,是有符号型的,占1 个字节;大小范围为-128—127 。int是整型数据类型,是有符号型的,占用4个字节,大小范围为:-2147483648到2147483647。
由大范围向小范围转换,如果超出了范围,可能会造成溢出。[/quote]

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧