进制表示和转换

2024-11-17

进制基本知识

计算机只有二进制,所有数据最后都要转成二进制。

十进制(decimal)

二进制(binary)

八进制(octal)

十六进制

二进制的笑话

世界上有10种人,认识和不认识二进制的。

进制转换

进制转换的快速方法

各进制与二进制的转化都比较快,所以可把该进制·转成二进制,再互相转化。

binary-convert

二进制转十进制

快速方法:记住每个位权的值,直接相加即可

-3位-2位-1位1位2位3位4位5位6位7位8位9位10位11位12位
0.1250.250.5124816326412825651210242048

比如:

101

涉及3位1位,那么就是4+1=5

示例

10010010.110

快速计算

涉及到第2、5、8、-1、-2位。即2、16、128、0.5、0.25,相加得146.75

具体计算

$$1\times2^7+1\times2^4+1\times2^1+1\times2^{-1}+1\times2^{-2}=146.75$$

二进制转十六进制

特点:每4个数是一个位

0111 1011

每四位都是一个位。0111=7 1011=11,即十六进制的b。

所以对应的是0x7b

二进制转八进制

特点:每3个数是一个位

001 111 011

因此对应的就是001=1,111=7,011=3

所以对应的是0173

十进制转二进制

快速计算:拼凑法

方法:先把所有数据列举出来,快速拼凑出数据。

13位12位11位10位9位8位7位6位5位4位3位2位1位-1位-2位
40962048102451225612864321684210.50.25

比如,260.75

即256+4+0.75,所以是第9位、第3位、第-1位、第-2位。所以结果是

100000100.11

正常计算-手算

整数部分:将十进制数字不断取余,并从后往前写出数字。

小数部分:将小数不断乘以2,取整数部分。

比如,260.75

整数部分:

260/2,余数0;

130/2,余数0;

65/2,余数1;

32/2,余数0;

16/2,余数0;

8/2,余数0;

4/2,余数0;

2/2,余数0;

1/2,余数1

整数部分,从后往前数是100000100

小数部分:

0.75x2=1.5,整数位1,小数位0.5;

0.5x2=1,整数位1,小数位0;结束

取整数位11

所以,整体结果是100000100.11

十进制转八进制

手算

将十进制数字不断除以8,取余,并从后往前写出数字。

比如,123

123/8,余数3; 15/8,余数7; 1/8,余数1

所以,从后往前写是173,八进制表示是0173

十进制转十六进制

手算

将十进制数字不断除以16,取余,并从后往前写出数字。

比如,123

123/16,余数11; 7/16,余数7;

所以,从后往前写是7b,十进制表示是0x7b

带符号的二进制数字:原码 反码 补码

计算机数据存储采取补码形式存储,最高位是符号位

正数的原码、补码、反码都一样。

负数的原码:十进制转二进制,最高位设置为1

负数的反码:原码的基础上,最高位不变,其他位取反(0变1,1变0)

负数的补码:反码+1

-11的补码表示

如果是8位系统。

-11的原码为:

10001011,其中第一位是符号位,0是整数,1是负数。

-11的补反码为:原码取反,符号位不变。

11110100

-11的补码:反码+1

11110101

如果对补码有疑问,可以参考为什么计算机要用补码表示-方便电路运算

根据补码求十进制数

1110 1011是多少?

思考:

如果是正数,符号为0,正数三码合一反而简单。

题目中是负数,这个是补码。因为计算机底层是用补码存储的。

求反码:-1即可

1110 1010

求原码:取反,符号位不变

1001 0101

二进制转十进制:

-21