关于程序员:程序员不得不了解的计算机进制转换

32次阅读

共计 1786 个字符,预计需要花费 5 分钟才能阅读完成。

程序员不得不理解的计算机进制转换

最近在备考软考的软件设计师考试,学到了对于计算机的数据表示,因为我是科班出身学的 Java,导致计算机基础知识很差,在这里记录一下学习感触

为啥要用二进制

  • 晚期计算机的存储介质是晶体管,晶体管依据电压不同,只能示意 2 种状态,也就是 0 和 1
  • 计算机应用二进制运算更加不便

更具体的请参考计算机为啥采纳二进制

为啥要用十六进制

首先,如果你的计算机是 32 位的机器,数字 1 在计算机中的示意就是 0000000000000000001,
如果你是要操作内存,用这么长一串二进制数,是不是感觉有拍板大,1 位 16 进制数能够示意 4 位二进制数,
数字 1 用 16 进制 来示意就是1H,是不是感觉清新多了。

进制转换的原理

浏览本章之前须要明确的点

  • 进制数的位数从右到左,别离示意从高到低,咱们称左边的数为高位,右边的数为低位
  • 一位八进制数最多示意三位二进制数,一位十六进制数最多示意 4 位二进制数

十进制转二进制、八进制、十六进制

对于 10 进制转其余进制,个别是应用除法取余数的形式进行计算

例如将数字151 转换为二进制

被除数  ÷  除数  =  商  ... 余数
151 ÷ 2 = 75 ... 1 
75 ÷ 2 = 37 ... 1 
37 ÷ 2 = 18 ... 1 
18 ÷ 2 = 9 ... 0 
9 ÷ 2 = 4 ... 1
4 ÷ 2 = 2 ... 0 
2 ÷ 2 = 1 ... 0 
1 ÷ 2 = 0 ... 1
将每一步失去的余数从下往上顺次排列,失去 10010111,即 151 的二进制示意。

转为八进制

151 ÷ 8 = 18 ... 7
18 ÷ 8 = 2 ... 2
2 ÷ 8 = 0 ... 2
151 的 8 进制示意为 227

转为十六进制

151 ÷ 16 = 9 ... 7 
9 ÷ 16 = 0 ... 9
因而,151 的 16 进制数为 97

二进制、八进制、十六进制转十进制

对于其余进制转换为 10 进制,咱们个别是采纳按权开展法,并且具备公式

  • r 为进制单位 如果数字为二进制 则 r = 2
  • n 为数字的位数,例如有一个二进制数 1001,则它的 n 为 4
  • $a_{n}$ 示意取数字的第几位 如果有一个二进制数 1001,那么 $a_{n}$ 就为 1

例如: 十进制数 11 的二进制数为1011

应用按权开展法, 首先该二进制数有 4 位,所以 n 为 4 , 能够得出以下式子

对于八进制,十六进制都是应用该办法转换为 10 进制

二进制、八进制、十六进制之间相互转换

将二进制数转换为八进制数,须要先将二进制数转换为 10 进制,而后将 10 进制数转换为八进制

这种转换形式有点麻烦,如果不是很大的数字,能够看下一章,疾速转换

疾速转换进制的办法

疾速转换能够通过查表的形式疾速转换

十进制 二进制 八进制 十六进制
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F

在这个表格中,每个进制的数字都有对应的二进制、八进制、十进制、十六进制数。例如,十进制数 2 对应二进制数 10,八进制数 2 和十六进制数 2 都是用数字 2 来示意,十六进制数 F 对应二进制数 1111。应用这个表格能够疾速地进行不同进制之间的转换。

这种形式对于二进制、八进制、十六进制之间的转换十分无效

例如 将二进制数 10101 转换为十六进制

  • 首先一个十六进制数最多示意 4 位进制数
  • 从低位取 4 位二进制数 0101 在 16 进制下没有发现该数字,将高位的 0 去掉 失去 101,查到 16 进制数 5
  • 持续从低位再取 4 位,发现只有 1 了, 那它的 16 进制数就是 1
  • 从低位到高位组合 16 进制数 失去 15

进制加减法

还记得小学咱们学的十进制加减法不,即 满十进一法 .
其实对于二进制,八进制,16 进制数可别离对应满二进一,满八进一,满 16 进一.

请参考 16 进制加减法

二进制计算符号位溢出问题

学习该章首先要明确的点

  • 计算机中的位,示意的是 CPU 的寻址空间大小
  • 计算机中二进制 (原码) 数字的首位为符号位,0 示意负数,1 示意正数
  • 这里也能够了解为数字示意的最大二进制位数

首先如果咱们在一个 字长为 8 位 的计算机中进行运算 5 + 7

将它们转换为 2 进制运算 00000101 + 00000111 = 00001100
00001100 = 12

那如果是 -5 + -7 呢

转换为二进制运算就是,10000101 + 10000111 = 100001100

100001100 计算出来的二进制数变成了 9 位,8 位下的计算计算机咋能示意 9 位呢,那把 首位的 1 去掉 就变成了 00001100 = 12

额,为啥 两个正数相加咋变成负数了,计算机是不是傻了。咱们下节持续

正文完
 0