二进制补码

二进制补码:(使用二进制补码的目的:降低成本)

1)将最高位为1的大数作为负数使用,最高位也叫做符号位。

2)计算时如果结果超出范围,新多出的数字自动溢出(舍弃)。

3)在不超过范围的情况下,补码运算符合数学规则。

4)缺点:有范围,不能进行超范围计算

 

补码的取反对称现象:-n = ~n+1

                 ~n = -n-1

                 “~”表示取反,对二进制取反(取反就是0变1,1变0)

例如:

    -5的补码 就是5的二进制数取反 + 1

             5(10) = 00000000 00000000 00000000 00000101(2)

          ~5(取反) = 11111111 11111111 11111111 11111010

          -5的补码 = 11111111 11111111 11111111 11111011

 

符号位扩展现象:

低位数补码(如4位)扩展为高位数补码(32位)

正数在前面补0,负数在前面补1

32位补码的一些事儿:

               最小值 0x800……000

                      ………………

                 -2   0xfff……ffe  

                 -1   0xfff……fff

                  0   0x000……000

                  1   0x000……001 

                  2   0x000……002

                      ………………

               最大值 0x7ff……fff

进制的总结:

        1)计算机只能处理2进制数据(经常是补码)

        2)计算机内部没有10进制和16进制

        3)10进制是人类处理数据的习惯,

           Java中通过API提供方法实现10进制的处理

        4)16进制是便捷的2进制书写格式

        5)一切交给计算机处理的数据都要转换为2进制数据

        6)0x(零x)是16进制的书写格式  0(零)开头是8进制书写格式

 

扩展知识:

 

8位补码为一个字节

 

10进制计数规律

 数字: 0 1 2 3 4 5 6 7 8 9

 基数:10

 权:  .....  1000 100 10 1   

 权是基数的n次幂 

 

 2进制计数规律

 数字: 0 1  

 基数:2

 权:  .....  128 64 32 16 8 4 2 1 

 权是基数的n次幂

 

  (10)   (2)

   0      0

   1      1

   2     10

   3     11

   4    100

   5    101

   6    110

   7    111

   8   1000

   9   1001

  10   1010

  11   1011

  12   1100

  13   1101

  14   1110

  15   1111

  

  展开式:

  11001010(2) = 128+64+8+2 = 202(10) 

  

  234(10) = ?(2)

            

            128 64 32 16 8 4 2 1

  234(10) =  1   1  1  0 1 0 1 0 (2) 

  

  222(10) = ?(2)

  195(10) = ?(2)

  238(10) = ?(2) 

 

  符号位扩展现象: 

  低位数补码(如4位补码)扩展为高位数补码(如32位补码): 

  正数(在前面)补0 负数(在前面)补1

           

  (10) 4位补   8位补        32位补码 

 min         -------- 10000000 00000000 00000000 00000000

... 

-129         -------- 11111111 11111111 11111111 01111111

-128   ----  10000000 11111111 11111111 11111111 10000000 

-127   ----  10000001 

-126   ----  10000010 

  ....

 -10   ----  11110110 

  -9   ----  11110111 

  -8   1000  11111000

  -7   1001  11111001

  -6   1010  11111010

  -5   1011  11111011

  -4   1100  11111100

  -3   1101  11111101 11111111 11111111 11111111 11111101

  -2   1110  11111110 11111111 11111111 11111111 11111110

  -1   1111  11111111 11111111 11111111 11111111 11111111 

   0   0000  00000000 00000000 00000000 00000000 00000000 

   1   0001  00000001 00000000 00000000 00000000 00000001

   2   0010  00000010 00000000 00000000 00000000 00000010

   3   0011  00000011 00000000 00000000 00000000 00000011

   4   0100  00000100 

   5   0101  00000101

   6   0110  00000110

   7   0111  00000111

   8   ----  00001000

   9   ----  00001001

  10   ----  00001010

  ...

  126  ----  01111110

  127  ----  01111111 00000000 00000000 00000000 01111111

  128  ----  -------- 00000000 00000000 00000000 10000000

  129  ----  -------- 00000000 00000000 00000000 10000001

  .... 

  max  ----  -------- 01111111 11111111 11111111 11111111

                      7   f    f   f    f   f    f   f   

 

      最大值 0x7ff……fff

      最小值 0x800……000

        -1   0xfff……fff

        -2   0xfff……ffe 

   

补码运算:  

  -3   1101

  -3   1101

+     11 1     

-------------

  -6   1010  

 

 

  -5 的补码:  

  -5 = ~5 + 1  

   0101  (5)

   1010  (~5)

   1011  (~5+1=-5)

      

16 进制计数规律

 数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f  

 基数:16 

 权:  256 16 1

 权是基数的n次幂

 

 16进制用于简化2进制的书写!

 每4位2进制数据 可以简写为1位16进制数 

 16进制就是2进制!

 

 10    16            2

  0    00    0000 0000

  1    01    0000 0001

  2    02    0000 0010

  3    03    0000 0011

  4    04    0000 0100

  5    05    0000 0101

  6    06    0000 0110

  7    07    0000 0111

  8    08    0000 1000

  9    09    0000 1001

 10    0a    0000 1010

 11    0b    0000 1011

 12    0c    0000 1100

 13    0d    0000 1101

 14    0e    0000 1110

 15    0f    0000 1111

 16    10    0001 0000

 17    11    0001 0001

 18    12    0001 0010

 ...

 65    41    0100 0001

 66    42    0100 0010

 ...

192    c0    1100 0000 

193    c1    1100 0001

... 

255    ff    1111 1111

 

进制的总结:

 1) 计算机只能处理 2 进制数据(经常是补码)!

 2) 计算机内部没有 10 进制 和 16进制

 3) 10进制是人类 处理数据的习惯,

    Java 利用API 提供算法(方法)实现 10进制的处理! 

 4) 16 进制 是便捷的 2进制书写格式! 

 5) 一切交给计算机的处理的数据,都要转换为2进制!

你可能感兴趣的:(java小知识)