二进制补码

  计算机只能处理2进制数据(常常是补码!),计算机内部没有10进制和16进制,10进制是人类处理数据的习惯,Java利用API提供的的算法(方法)实现10进制的处理。16进制是便捷的2进制书写格式。java

  一切交给计算机处理的数据,都要转化为2进制。算法

  计算机不认识正负数,因此本来二进制是没有负数的,但由于运算须要,正负二进制是人为规定的,因此才有了补码(补充的码)。eclipse

  计算机在输入输出的时候,依照人的习惯,利用算法实现10进制输入输出。spa

以4位补码为例:code

  1. 将高位为1的大数,做为负数使用;
  2. 计算时候超过4位数,多出数位自动溢出舍弃
  3. 在不超过范围状况下,补码运算知足数学规则
  4. 缺点:数字有范围,不能进行超范围计算(例如4位补码的范围是-8~7,8位补码的范围是-128~127)
  5. 特别要注意运算范围,否则溢出致使运算出错

见下图:blog

  由图中能够看出从上到下逐一加1,而且以粉色横线为镜面,上下互为反码,这也是补码取反对称现象,由此可得出——~n=-n-1(~n:n取反)ip

  

 

0x是16进制的前缀,0是8进制的前缀。0x7fffffff是最大的16进制数,0x80000000是最小的16进制数数学

eclipse中数字的2进制和16进制不显示高位的0。class

 

 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 }
相关文章
相关标签/搜索