Java 补码
补码介绍
计算机中所有数据都是二进制数字,而事实上计算机只识别正数,为了实现负数的表达由此补码诞生了.
补码是人为规定的高位溢出现象,简单概括就是"高位溢出".
四位补码
++四位补码规则
A. 使用四位二进制数字,只保留4位,超出范围则舍弃.
B. 高位为1的表示负数
C. 4位补码的表达范围:-8 ~ +7
D. 可以进行4位二进制数字以内的数学运算
++四位二进制数
++四位补码
通过四位补码规则以及四位二进制数的结合可以推断出四位补码的正负数表示
++四位补码验证
可以通过一个简单的小程序来输出-8到7的补码用来对比是否与上图一致.
package basic;
/** 4位补码验证程序 */
public class Complement {
public static void main(String[] args) {
//输出-8到7范围的二进制补码
int start = -8;
int end = 7;
for(int i=start; i<=end; i++){
System.out.println(i+" -> "+Integer.toBinaryString(i));
}
}
}
输出结果,由于Java int类型为32位补码,所以转换为二进制输出时负数自动补1,正数0自动隐藏.
其他位补码
++八位补码
八位补码规则
A. 使用八位二进制数字,只保留8位,超出范围则舍弃.
B. 高位为1的表示负数
C. 8位补码的表达范围:-128 ~ +127
D. 可以进行8位二进制数字以内的数学运算
++十六位补码
十六位补码规则
A. 使用十六位二进制数字,只保留16位,超出范围则舍弃.
B. 高位为1的表示负数
C. 16位补码的表达范围:-32768 ~ +32767
D. 可以进行16位二进制数字以内的数学运算
++三十二位补码
三十二位补码规则
A. 使用三十二位二进制数字,只保留32位,超出范围则舍弃.
B. 高位为1的表示负数
C. 32位补码的表达范围约为:-21亿 ~ +21亿
D. 可以进行32位二进制数字以内的数学运算
补码规则
通过上述补码示例可以推断出如下几个关于补码的规则
1. 取反+1等于相应的正负数
Java中取反操作为~. 单纯的取反操作得到的是这个数的反码.
~-1 +1 = 1
其他位数补码算法相同.
2.补码最大值开头为0,其余全为1,
补码最小是开头为1,其余全为0。
由于补码的人为硬性规定,一定要注意开发过程中避免涉及到不同位数的补码边缘值.
--------------------------------------------------------------------------------------
版权所有,转载时必须以链接方式注明源地址,否则追究法律责任!
Email : softomg@163.com
Blog : http://blog.youkuaiyun.com/softomg