首页 > 代码库 > 打印整数(包含负数)在计算机内部的二进制表示
打印整数(包含负数)在计算机内部的二进制表示
在理解整数的二进制表示之前我们首先要知道以下三个概念:源码、补码和反码。源码就是一个整数的二进制表示,其中最高位为符号位,我们用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
打印整数(包含负数)在计算机内部的二进制表示
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。