0
点赞
收藏
分享

微信扫一扫

第八章《Java高级语法》第2节:补码

无愠色 2022-12-31 阅读 104

​在Java语言中,使用补码的形式来表示数字。补码是计算机表示数字的一种规则或者是表示形式,它的算法很简单:用最左边的一个二进制位表示数字的正负,0表示正数,用1表示负数,专业上把表示符号的这个二进制位叫做“符号位”。符号位后面剩余的二进制位表示数字本身。

对于正数而言,直接用剩余二进制位表示这个数字就可以了。例如一个数字42,如果存储为int类型,那么这个数字在内存中会占据32位,在最左边一位上的0表示这是一个正数,用剩余的31位来表示42这个数字本身就可以了,如图8-8所示。​

第八章《Java高级语法》第2节:补码_补码

图8-8 补码表示int型数据42​

从图8-8可以看出:符号位连同后面表示数字本身的二进制数总共是32位,恰好是Java语言中int类型数据的长度。对于其他类型,最左边依然是符号位,数字的表示规则也相同,只不过右边表示数字的二进制位的位数发生了变化而已。比如long类型的数据,右边表示数字的二进制位是63位,再加上符号位,总共是64位,恰好是8个字节。​

对于负数而言,首先用补码表示出这个数的绝对值,之后把每个位上的数字按位取反。所谓“按位取反”就是:如果这个位上原来是0,那么就变成1,如果原来这个位上原来是1,那么就变成0。按位取反后在数字的末位加上1就得到了负数的补码表示。例如把数字-42表示为补码的过程如图8-9所示。​

第八章《Java高级语法》第2节:补码_Java_02

图8-9 补码表示int型数据-42​

读者如果希望验证数字转换的结果是否正确,可以使用Java基础类库中的Integer类来完成检验。Integer类位于java.lang包,因此使用这个类时不需要引入操作。Integer类中定义了一个静态方法叫做toBinaryString,通过该方法可以得到任何一个整数的补码表示结果。需要说明:toBinaryString()方法的返回值类型是String。下面的【例08_02】展示了使用toBinaryString()方法计算-42的补码。​

【例08_02 计算-42的补码】

Exam08_02.java​

public class Exam08_02 {
public static void main(String[] args) {
String result = Integer.toBinaryString(-42);
System.out.println("-42的补码是:"+result);
}
}

【例08_02】的运行结果如图8-10所示。​

第八章《Java高级语法》第2节:补码_Java_03

图8-10 【例08_02】运行结果​

从图8-10可以看出:运算所得到的补码是32位,说明toBinaryString()方法是按int型数据来表示整数补码的。​

另外还要提醒各位读者:在补码的表示形式中,0这个数字是按正数表示的,因此数字0转换成补码后它的符号位也是0。因为0被当成了一个正数,所以Java语言中所有整数的表示范围并都不是对称的,例如byte型数据的最小值是-128,但最大值却是127。

除此文字版教程外,小伙伴们还可以​​点击这里​​观看我在本站的视频课程学习Java。

举报

相关推荐

0 条评论