首页 > 代码库 > 打印整数(包含负数)在计算机内部的二进制表示

打印整数(包含负数)在计算机内部的二进制表示

在理解整数的二进制表示之前我们首先要知道以下三个概念:源码、补码和反码。源码就是一个整数的二进制表示,其中最高位为符号位,我们用0表示正数,用1表示负数。如果用8位表示一个整数的话,5的源码我们可以表示为00000101。-6的源码我们可以表示为10000110。反码是将源码符号位(也就是最高位)不变,其他位取反得到的二进制码。补码是将反码反码按位加上二进制数1得到的二进制码。 在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值位统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

正数补码:和原码相同。负数补码:符号位不动,反码加1

看如下例子:

我们可以用如下代码来验证我们上面的结论:

package test;
/**
 * 在Java中整数占4个字节,也就是32位
 * @author wl
 *
 */
public class PrintIntByBinary {
	public static void main(String[] args) {
		int a1=3;
		System.out.print(a1+"的二进制表示形式为:");
		printBinaryOfInt(a1);
		
		int a2=-3;
		System.out.print(a2+"的二进制表示形式为:");
		printBinaryOfInt(a2);
	}
	
	public static void printBinaryOfInt(int num){
		int t=0;
		for(int i=0;i<32;i++){//循环32次,应为int型在Java中占32位
			t=(num&0x80000000>>>i)>>>(31-i);
			/*0x80000000的二进制表示形式为最高位为1其他31位为0,>>>表示
			无符号右移,当i=0时,0x80000000>>>0结果还是0x80000000,
			num&0x80000000,表示取num的最高位,其他位都置0,然后再将结果进行>>>(31-i)
			运算,也就是无符号右移31次,得到最高位,当i=1、2、3.....时依次取出次高位,第29位的
			一直到最低位的值*/								
			System.out.print(t);
		}
		System.out.println();
	}
}

输出为:

3的二进制表示形式为:00000000000000000000000000000011

-3的二进制表示形式为:11111111111111111111111111111101




打印整数(包含负数)在计算机内部的二进制表示