二进制补码

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

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

  计算机不认识正负数,所以原本二进制是没有负数的,但因为运算需要,正负二进制是人为规定的,所以才有了补码(补充的码)。

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

以4位补码为例:

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

见下图:

  由图中可以看出从上到下逐一加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 }

 

 

 

 

posted on 2013-08-04 10:56  提子呀呀  阅读(1883)  评论(0)    收藏  举报

导航