二进制补码
计算机只能处理2进制数据(经常是补码!),计算机内部没有10进制和16进制,10进制是人类处理数据的习惯,Java利用API提供的的算法(方法)实现10进制的处理。16进制是便捷的2进制书写格式。
一切交给计算机处理的数据,都要转化为2进制。
计算机不认识正负数,所以原本二进制是没有负数的,但因为运算需要,正负二进制是人为规定的,所以才有了补码(补充的码)。
计算机在输入输出的时候,依照人的习惯,利用算法实现10进制输入输出。
以4位补码为例:
- 将高位为1的大数,作为负数使用;
- 计算时候超过4位数,多出数位自动溢出舍弃
- 在不超过范围情况下,补码运算满足数学规则
- 缺点:数字有范围,不能进行超范围计算(例如4位补码的范围是-8~7,8位补码的范围是-128~127)
- 特别要注意运算范围,不然溢出导致运算出错
见下图:
由图中可以看出从上到下逐一加1,并且以粉色横线为镜面,上下互为反码,这也是补码取反对称现象,由此可得出——~n=-n-1(~n:n取反)

0x是16进制的前缀,0是8进制的前缀。0x7fffffff是最大的16进制数,0x80000000是最小的16进制数
eclipse中数字的2进制和16进制不显示高位的0。
1 package Test; 2 3 import java.util.Scanner; 4 5 public class Test { 6 public static void main(String[] args) { 7 System.out.println("请输入要查看2进制的数字:"); 8 Scanner in = new Scanner(System.in); 9 int n = in.nextInt(); 10 System.out.println(n+"的2进制表示是:"+Integer.toBinaryString(n)); 11 System.out.println(n+"的16进制表示是:"+Integer.toHexString(n)); 12 System.out.println(~100);//使用公式~n=-n-1 13 } 14 }
浙公网安备 33010602011771号