题目
byte b = 130; 此表达式有没有问题? 如果想正确赋值, 可以怎么做? 最终结果是多少?
分析
byte类型在Java语言中占1个字节, 它的取值范围是-128 - 127, 所以此表达式有问题如果想正确赋值, 需要强制类型转换: byte b = (byte) 130;最终结果首先要了解数值在计算机中的计算方式, 可以参考之前的文章..
已知130默认为int类型, Java int类型在内存中占四个字节, 所以int类型130用二进制表示为:
00000000 00000000 00000000 10000010 (这是130的原码, 反码和补码)
强制转换为byte类型, byte类型占一个字节, 所以截取后二进制为:
10000010 (运算是以补码进行的, 这个结果是补码)
已知补码求原码
符号位 数值位
补码 1 0000010
反码 1 0000001
原码 1 1111110
----------------------------------------------
符号位为1, 所以为负数
数值位1111110, 二进制转十进制为126, 所以最后值为-126