进制转换

什么叫进制

  • 进制就是逢几进一;
  • N进制实际就是逢N进一。

    不同语言的进制表示

    C语言

  • 八进制前要加0(数字0);

  • 十六进制前要加0x0X
  • 十进制前不需要加符号;

    汇编语言

  • 在数字后加字母B表示二进制;

  • 在数字后加字母O表示八进制;
  • 在数字后加字母D表示十进制;
  • 在数字后加字母H表示十六进制。 ```c 例子:

1011B表示二进制的1011; 1234O表示八进制的1234; 1024D表示十进制的1024; 3FF3H表示十六进制的3FF3。

  1. <a name="d1p5C"></a>
  2. ## 十进制转 r 进制的方法
  3. **数值除r取余,直至商为0,余数倒序排列**即可完成进制转换。
  4. <a name="izYR1"></a>
  5. ## r 进制转十进制的方法
  6. 例子:<br />`101012 = 1*20 + 0*21 + 1*22 + 0*23 + 1*24 = 21`
  7. <a name="WG91o"></a>
  8. ## 二进制与十六进制的转换
  9. <a name="uSTXi"></a>
  10. ### 二进制转十六进制的方法
  11. 从右向左,四位一组,分别转换,最前面的一组不够四位前面补零。
  12. ```c
  13. 0001 1110 ==> 1 E

十六进制转二进制的方法

将每一个十六进制位转换成四个二进制位。

  1. 0x1E ==> 0001 1110

二进制与八进制的转换

二进制转八进制的方法

从右向左,三位一组,分别转换,最前面的一组不够三位前面补零。

  1. 0 101 110 ==> 0 5 6

八进制转二进制的方法

将每一个八进制位转换成三个二进制位。

  1. 27 ==> 010 111

十六进制与八进制的转换

不存在十六进制与八进制的直接转换,都是以二进制为中间进制来进行转换

存储编码知识

原码

——正整数的原码、反码和补码均相同

原码的定义

也叫 符号-绝对值码。
最高位0表示正,1表示负,其余二进制位是该数值的绝对值二进制位。

原码的优缺点

  • 原码简单易懂;
  • 加减运算复杂;
  • 存在加减乘除四种运算,增加了CPU的负担;
  • 零的表示不唯一。

    反码

    正整数反码

    与原码相同。

    负整数反码

    把原码的符号位保持不变,数值位逐位取反,即可得原码的反码

    补码

    正整数补码

    与原码相同。

    负整数补码

    在反码的基础上加 1 即得该原码的补码
    ——对补码再求一次补码操作就可得该补码对应的原码

    十进制转二进制(举例)

    正整数转二进制

    除2取余,直至商为零,余数倒序排序

    负整数转二进制

    先求与该负数相对应的正整数的二进制编码,然后将所有位取反,末位加1,不够位数时,左边补1。 ```c int (-1)转二进制的过程:

-1 ==> 01(正整数二进制) ==> 10(二进制取反) ==> 11(末位加1) ==> 1111 1111 … 1111(按数据类型补齐)

int (-3)转二进制的过程:

-3 ==> 11(正整数二进制) ==> 00(二进制取反) ==> 01(末位加1) ==> 1111 1111 … 1101(按数据类型补齐)

  1. <a name="zDReR"></a>
  2. #### 零转二进制(零既不是正数也不是负数)
  3. **全是零**。
  4. <a name="Z0rxe"></a>
  5. ### 二进制转十进制(举例)
  6. **如果首位是0,则表明是正整数,按普通方法(前面补零,即和原码一样)来计算**。<br />**如果首位是1,则表明是负整数,将所有位取反,末位加1,所得数值就是该负数的绝对值**。
  7. ```c
  8. 例子:
  9. 011 ==> 3
  10. 111 ==> -1

移码

  • 移码表示数值平移n位,n称为移码量;
  • 移码主要用于浮点数的阶码的存储。

    位运算符