A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

7 个回复

倒序浏览
魏志林 来自手机 中级黑马 2015-12-28 10:07:39
沙发
同问,是不是int占两位,byte只有一位,估计要报异常哦,回去拿电脑试试
回复 使用道具 举报
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


回复 使用道具 举报 1 0
魏志林 来自手机 中级黑马 2015-12-28 12:48:37
板凳
多谢啊,那如果数太大,就会失真哦,因为舍弃了3个字节
回复 使用道具 举报
luyang18 来自手机 中级黑马 2015-12-29 12:42:01
报纸
来学习,讲得好详细
回复 使用道具 举报
非常感谢,受教了{:2_32:}
回复 使用道具 举报
受教了  跟进制有关系系的讲的好详细 啊
回复 使用道具 举报
a461408739 来自手机 中级黑马 2015-12-29 21:48:08
8#
原来如此{:2_43:}{:2_43:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马