黑马程序员技术交流社区

标题: byte by = (byte)130; 其结果和详细的运算过程 [打印本页]

作者: 小胡    时间: 2015-12-27 23:25
标题: byte by = (byte)130; 其结果和详细的运算过程
这个属于强制转换,其130被默认为int类型,通过强制类型转化成byte类型,而byte的取值范围在-128到127之间,而130却超过了这个范围,那么byte by = (byte)130;
结果是多少?其运算的过程是怎样的(希望大神们能详细一点)?

作者: 魏志林    时间: 2015-12-28 10:07
同问,是不是int占两位,byte只有一位,估计要报异常哦,回去拿电脑试试
作者: kmustfeng    时间: 2015-12-28 11:03
byte by = (byte)130 ;
因为java中整数默认为int类型,我们先把130用二进制表示出来,我们使用8421码快速转换得到   10000010
在内存中数据用补码表示,而130是一个正数,原码、反码、补码一样
又因为int类型在内存中占用四个字节,所以130在内存中的表示如下
00000000 00000000 00000000 10000010
当我们对130强制转换时,因为byte只占一个字节,所以前面的数据被截取
剩下:10000010 从符号位看出这是一个负数,我们把它先转换为反码
反码: 10000001 我们对数据位取反得到原码
原码: 11111110 我们再次使用8421码把他转换为十进制
得到 -(64+32+16+8+4+2)=-126
所以 byte by = (byte)130 ;
结果输出为-126



作者: 魏志林    时间: 2015-12-28 12:48
多谢啊,那如果数太大,就会失真哦,因为舍弃了3个字节
作者: luyang18    时间: 2015-12-29 12:42
来学习,讲得好详细
作者: 小胡    时间: 2015-12-29 20:07
非常感谢,受教了{:2_32:}
作者: sunpeijie    时间: 2015-12-29 21:34
受教了  跟进制有关系系的讲的好详细 啊
作者: a461408739    时间: 2015-12-29 21:48
原来如此{:2_43:}{:2_43:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2