1. 二进制概念

  1. 二进制是由0与1组成的机器码 即01010101
  2. 二进制单位是bit
  3. 8bit为1组 ,实际情况就是数字1 转换为二进制 00000001
  4. 二进制最高位为符号位,0表示正数(+),1 表示负数(-) -1 ---> 10000001 1 ----->00000001

2. 原码

  1. 原码就是符号位加上真值的绝对值.
  2. 例:

    1. [+1]原= 0000 0001
    2. [-1]原= 1000 0001

3. 反码

  1. 正数的反码是其本身;
  2. 负数的反码是在其原码的基础上,符号位不变,其余各个位取反。
    1. [+1] = [0000 0001]原= [0000 0001]反
    2. [-1] = [1000 0001]原= [1111 1110]反

4. 补码

  1. 正数的补码就是其本身;
  2. 负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(也即在反码的基础上+1)
    1. [+1] = [0000 0001]原= [0000 0001]反= [0000 0001]补
    2. [-1] = [1000 0001]原= [1111 1110]反= [1111 1111]补

5. 原码、反码、补码(重点 难点)

  1. 二进制的最高位是符号位: 0正 1负
  2. 正数的原码,反码,补码都一样(三码合一)
  3. 负数的反码=它的原码符号位不变,其他位取反(0->1,1->0)
  4. 负数的补码=它的反码+1,负数的反码=负数的补码-1
  5. 0的反码,补码都是0
  6. java没有无符号数,换言之,java中的数都是有符号的
  7. 在计算机运算的时候,都是以补码的方式来运算的.
  8. 当我们看运算结果的时候,要看它的原码(重点)

6. 二进制计算步骤

  1. 二进制计算方法步骤
  2. 先计算反码
  3. 在计算补码
  4. 运算符计算
  5. 计算的结果是补码
  6. 计算结果 再计算反码
  7. 计算结果计算的反码再计算原码
  8. 真正要计算的结果

7. 例子

/*
2.
    10000000 00000000 00000000 00000010 ==>-2
    10000000 00000000 00000000 00000011 ==>-3

    11111111 11111111 11111111 11111101 ==>-2 取反
    11111111 11111111 11111111 11111100 ==>-3 取反

    11111111 11111111 11111111 11111110 ==>-2 取补
    11111111 11111111 11111111 11111101 ==>-3 取补
    11111111 11111111 11111111 11111100 ==> & 结果
    11111111 11111111 11111111 11111011 ==> & 结果 取反 (补码取反 -1)
    10000000 00000000 00000000 00000100 ==> & 结果 取原码

*/

氷落
7 声望1 粉丝

一个年过30,苦苦挣扎的程序员......