黑马程序员技术交流社区
标题:
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