数据表示基础:进制
来自规范:数据表示基础 - 进制 熟悉进制的概念,特别是
|
在我们深入数制的世界之前,我们需要一个参考点,我建议您复制下表,以便在本章中随时参考以检查您的答案。
十六进制 | 二进制 | 十进制 |
---|---|---|
0 | 0000 | 0 |
1 | 0001 | 1 |
2 | 0010 | 2 |
3 | 0011 | 3 |
4 | 0100 | 4 |
5 | 0101 | 5 |
6 | 0110 | 6 |
7 | 0111 | 7 |
8 | 1000 | 8 |
9 | 1001 | 9 |
A | 1010 | 10 |
B | 1011 | 11 |
C | 1100 | 12 |
D | 1101 | 13 |
E | 1110 | 14 |
F | 1111 | 15 |
10 | 0001 0000 | 16 |
十进制是您可能从小就使用的数制。它也是基数 10 的另一种说法。这意味着每个数字可以使用 10 个不同的数字,即
0,1,2,3,4,5,6,7,8,9
请注意,如果我们想说“十”,我们会使用上面数字中的两个数字 1 和 0。
千位 | 百位 | 十位 | 个位 |
---|---|---|---|
103 | 102 | 101 | 100 |
1000 | 100 | 10 | 1 |
5 | 9 | 7 | 3 |
使用上表,我们可以看到每一列都有一个不同的值分配给它。如果我们知道列值,我们就可以知道数字,这在我们开始查看其他进制系统时将非常有用。显然,上面的数字是:五千、九百、七十和三个单位。
5*1000 + 9*100 + 7*10 + 3*1 = 597310
二进制是一个基数为 2 的数制,这意味着每个数字可以使用两个数字
0, 1
使用这两个数字,我们应该能够写出(或近似)所有可以用十进制写出的数字。
一百二十八位 | 六十四位 | 三十二位 | 十六位 | 八位 | 四位 | 两位 | 个位 |
---|---|---|---|---|---|---|---|
27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 |
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 |
使用上表,我们可以看到每一列都有一个分配给它的值,该值是 2 的幂(基数!),如果我们取这些值和相应的数字,我们可以计算出数字的值:1*64 + 1*32 + 1*8 + 1*2 = 106。
如果要求您计算二进制数字的值,最好的起点是用其对应值标记每一列,并将所有包含 1 的列加起来。让我们看另一个例子
000111112
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
因此,现在我们需要做的就是将包含 1 的列加起来:1*16 + 1*8 + 1*4 + 1*2 + 1*1 = 31
练习:二进制 将以下二进制数转换为十进制 000011002 答案
8+4 = 1210 010110012 答案
64 + 16 + 8 + 1 = 8910 000001112 答案
4 + 2 + 1 = 710 010101012 答案
64 + 16 + 4 + 1 = 8510 我们如何判断一个二进制数是否为奇数? 答案 其最右边的数字为 1 是否有一种快捷方式来计算由连续 1 组成的二进制数,例如:011111112 答案 是的,取第一个 0 的列值减 1
= 128 - 1 = 127 = 64 + 32 + 16 + 8 + 4 + 2 + 1 000011112 = 16 - 1 = 15 = 8 + 4 + 2 + 1 000001112 = 8 - 1 = 7 = 4 + 2 + 1 如果我们要使用八进制(一个基数为 8 的数制),列出每个数字可以取的不同数字 答案
0, 1, 2, 3, 4, 5, 6, 7 |
来自规范:数据表示基础 - 进制 熟悉并能够使用十六进制作为二进制的简写,并理解它为什么以这种方式使用。 |
您可能会从表中注意到,一个十六进制数字可以精确地表示 4 个二进制位。十六进制对我们来说是一种书写二进制的简写方式,并且可以更轻松地处理长二进制数字。
计数是一个基本概念,使用符号来表示一组对象。我们习惯于使用 10 个这样的符号(0-9)进行计数。当我们用完符号时,我们开始一列新的数字来表示更大的值集合。还有其他使用不同数量符号的计数方法,但是,计数过程以相同的方式进行。
十六进制是一个基数为 16 的数制,这意味着我们将有 16 个不同的数字来表示我们的数字。唯一的问题是我们在 9 之后用完了数字,并且知道 10 被计为两位数,我们需要使用字母来代替
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
我们可以对十进制和二进制执行完全相同的事情,并写出我们的表格。
165 | 164 | 163 | 162 | 161 | 160 |
---|---|---|---|---|---|
1 048 576 | 65536 | 4096 | 256 | 16 | 1 |
0 | 0 | 3 | 4 | A | F |
因此,现在我们需要做的就是将包含值的列加起来,但请记住 A = 10,B = 11,C = 12,D = 13,E = 14,F = 15。
3*4096 + 4*256 + (A)10*16 + (F)15*1 = 1348716
您可能想知道,当我们有二进制和十进制时,以及当计算机以二进制方式存储和计算所有内容时,为什么我们要使用十六进制。答案是它完全是为了人类的方便。考虑以下示例
表示 | 基数 |
---|---|
EFFE1116 | 基数 16 十六进制 |
1572814510 | 基数 10 十进制 |
1110111111111110000100012 | 基数 2 二进制 |
所有数字都是相同的,最容易让人记住/理解的版本是基数 16。十六进制用于计算机中表示供人类使用的数字,用于内存地址、错误或颜色代码等内容。注意:十六进制之所以使用,是因为它是二进制的简写,并且更容易让人记住。它不会占用计算机内存中的更少空间,只在纸上或在你的脑海中!计算机仍然必须将所有内容存储为二进制,即使它在屏幕上显示为十六进制。
练习:十六进制 将以下十六进制数转换为十进制 答案 16 1 A 1 16 * 10 + 1 * 1 = 16110 FF16 答案 16 1 F F 16 * 15 + 1 * 15 = 25510 0D16 答案 16 1 0 D 16 * 0 + 1 * 13 = 1310 3716 答案 16 1 3 7 16 * 3 + 1 * 7 = 5510 我们为什么要使用十六进制系统? 答案 十六进制用于人类,因为它更短,更容易理解和阅读。 列举十六进制系统的一个用途 答案 十六进制用于错误消息代码、内存地址和颜色代码 |
您之前看到的从十六进制转换为十进制的求和看起来有点麻烦,并且在考试中您不希望出现任何错误,因此我们必须找到一种更简单的方法来进行转换。
由于 4 个二进制位由一个十六进制数字表示,因此在两者之间进行转换非常简单。您可以将二进制位分组为 4 位一组,从右开始,并在需要时在左侧添加额外的 0,然后将每个组转换为其十六进制等效项。例如,二进制数 01101100111101012 可以这样写
0110 1100 1111 0101
然后通过使用上表,您可以将每组 4 位转换为十六进制
0110 1100 1111 0101 6 C F 5
因此,二进制数 01101100111101012 在十六进制中为 6CF516。我们可以通过将两者都转换为十进制来检查这一点。首先我们将转换二进制数,因为您已经知道如何执行此操作
32768 | 16384 | 8192 | 4096 | 2048 | 1024 | 512 | 256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 |
通过将列相乘然后将结果相加,答案为 2789310。
注意列标题都是2的幂,,,,,等等。要将十六进制转换为十进制,我们必须使用以16为底的幂作为列标题,如下所示。
4096 | 256 | 16 | 1 |
---|---|---|---|
6 | C | F | 5 |
(你应该记住A-F的值)
将它们全部加起来,我们得到2789310,这表明01101100111101012等于6CF516。
要将十进制转换为十六进制,建议先将数字转换为二进制,然后使用上述简单方法将二进制转换为十六进制。
总之,要将一个数字转换为另一个数字,我们可以使用以下规则:十六进制 <-> 二进制 <-> 十进制
练习:十六进制和进制转换 将以下十六进制值转换为十进制 1216 答案 1 2 (Hex) 0001 0010 (Binary) 128 64 32 16 8 4 2 1 0 0 0 1 0 0 1 0 = 16+2 = 1810 (decimal) A516 答案 A 5 (Hex) 1010 0101 (Binary) 128 64 32 16 8 4 2 1 1 0 1 0 0 1 0 1 = 128+32+4+1 = 16510 (decimal) 7F16 答案 7 F (Hex) 0111 1111 (Binary) 128 64 32 16 8 4 2 1 0 1 1 1 1 1 1 1 = 64+32+8+4+2+1 = 12710 (decimal) 1016 答案 1 0 (Hex) 0001 0000 (Binary) 128 64 32 16 8 4 2 1 0 0 0 1 0 0 0 0 = 1610 (decimal) 将以下二进制数转换为十六进制 101011012 答案 1010 1101 (Binary) A D (Hex) 1101112 答案 0011 0111 (Binary) 3 7 (Hex) 101011112 答案 1010 1111 (Binary) A F (Hex) 1110101000012 答案 1110 1010 0001 (Binary) E A 1 (Hex) 将以下十进制数转换为十六进制 8710 答案 128 64 32 16 8 4 2 1 0 1 0 1 0 1 1 1 = 64+16+4+2+1 = 8710 (decimal) 0101 0111 (Binary) 5 7 (Hex) 1210 答案 128 64 32 16 8 4 2 1 0 0 0 0 1 1 0 0 = 8+4 = 12(decimal) 0000 1100 (Binary) 0 C (Hex) 11710 答案 128 64 32 16 8 4 2 1 0 1 1 1 0 1 0 1 = 64+32+16+4+1 = 117(decimal) 0111 0101 (Binary) 7 5 (Hex) 为什么可能使用十六进制? 答案 以便使错误消息和内存地址等内容更容易让人类理解、阅读和记忆——因为它们更短。 给出十六进制的两种用途? 答案
|