目录
一. 简介
数制
码制
二. 进制
十进制(Decimal):
二进制(Binary):
八进制(Octal):
十六进制(Hexadecimal):
三. 进制的转换
十进制转二进制
十进制转八进制
十进制转十六进制
二进制转十进制
八进制转十进制
十六进制转十进制
二进制转八进制
二进制转十六进制
八进制转二进制
十六进制转二进制
四. 反码 补码
反码:
补码:
五. BCD码和格雷码
六. ASCII码
一. 简介
数制
数制是用于计数的方法,常见的数制包括十进制、二进制、八进制和十六进制。
十进制是我们日常生活中最常用的数制,它由 0、1、2、3、4、5、6、7、8、9 这十个数字组成,遵循“逢十进一”的原则。
二进制则是数字电路中最为重要的数制,仅由 0 和 1 两个数字组成,遵循“逢二进一”的规则。由于计算机的硬件基础是由大量的逻辑电路构成,这些逻辑电路通常只有两种稳定的状态,正好可以用二进制的 0 和 1 来表示。
八进制由 0、1、2、3、4、5、6、7 这八个数字组成,遵循“逢八进一”。
十六进制由 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F 这十六个数字和字母组成,遵循“逢十六进一”。
码制
码制是指用代码来表示特定信息的方法。常见的码制有 BCD 码(二-十进制码)、格雷码等。
BCD 码是用四位二进制数来表示一位十进制数。
格雷码的特点是相邻的两个编码之间只有一位发生变化,这在数字电路中可以减少错误的发生。
二. 进制
十进制(Decimal):
十进制是我们日常生活中最常用的数制。
它由 0、1、2、3、4、5、6、7、8、9 这十个数字组成。
计数规则是“逢十进一”。例如,当个位数字达到 9 后,再增加 1 就会向十位进 1,变成 10 。
十进制数的位权是以 10 为底的幂。例如,数字 123 中,3 的位权是 10^0 = 1,2 的位权是 10^1 = 10,1 的位权是 10^2 = 100 。
二进制(Binary):
二进制是数字电路和计算机系统中最基本的数制。
它仅由 0 和 1 两个数字组成,计数规则是“逢二进一”。例如,当个位数字为 1 时,再增加 1 就会向十位进 1,变成 10 。
二进制数的位权是以 2 为底的幂。例如,二进制数 101 中,1 的位权是 2^0 = 1,0 的位权是 2^1 = 2,1 的位权是 2^2 = 4 。
二进制常用于表示计算机中的数据和指令,因为计算机的硬件电路状态只有两种,容易用二进制表示。
八进制(Octal):
八进制由 0、1、2、3、4、5、6、7 这八个数字组成,计数规则是“逢八进一”。例如,当数字达到 7 后,再增加 1 就会向高位进 1,变成 10 。
八进制数的位权是以 8 为底的幂。例如,八进制数 25 中,5 的位权是 8^0 = 1,2 的位权是 8^1 = 8 。
十六进制(Hexadecimal):
十六进制由 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F 这十六个数字和字母组成,其中 A 代表 10,B 代表 11,C 代表 12,D 代表 13,E 代表 14,F 代表 15 。计数规则是“逢十六进一”。例如,当数字达到 F 后,再增加 1 就会向高位进 1,变成 10 。
十六进制数的位权是以 16 为底的幂。例如,十六进制数 3A 中,A 的位权是 16^0 = 1,3 的位权是 16^1 = 16 。
十六进制常用于表示计算机中的内存地址和数据,因为它比二进制更简洁,又比八进制能表示更多的信息。
三. 进制的转换
十进制转二进制
方法:除 2 取余法。将十进制数除以 2,取余数,然后将商继续除以 2,直到商为 0。再将所有的余数从右到左排列,得到的就是二进制数。
技巧:可以通过记住 2 的幂次方对应的数值,快速判断二进制位的值。
例如:十进制 13 转二进制
13÷2 = 6 余 1
6÷2 = 3 余 0
3÷2 = 1 余 1
1÷2 = 0 余 1
从右到左排列余数得到 1101
十进制转八进制
方法:除 8 取余法。将十进制数除以 8,取余数,然后将商继续除以 8,直到商为 0。再将所有的余数从右到左排列,得到的就是八进制数。
技巧:可以先将十进制转二进制,然后从右往左每三位一组,转换为八进制。
例如:十进制 57 转八进制
57÷8 = 7 余 1
7÷8 = 0 余 7
从右到左排列余数得到 71
十进制转十六进制
方法:除 16 取余法。将十进制数除以 16,取余数,然后将商继续除以 16,直到商为 0。再将所有的余数从右到左排列,得到的就是十六进制数。如果余数大于 9,则用 A - F 表示。
技巧:可以先将十进制转二进制,然后从右往左每四位一组,转换为十六进制。
例如:十进制 255 转十六进制
255÷16 = 15 余 15(F)
15÷16 = 0 余 15(F)
从右到左排列余数得到 FF
二进制转十进制
方法:位权相加法。将二进制数的每一位乘以 2 的相应幂次,然后将结果相加。
例如:二进制 1011 转十进制
1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 8 + 0 + 2 + 1 = 11
八进制转十进制
方法:位权相加法。将八进制数的每一位乘以 8 的相应幂次,然后将结果相加。
例如:八进制 73 转十进制
7×8¹ + 3×8⁰ = 56 + 3 = 59
十六进制转十进制
方法:位权相加法。将十六进制数的每一位乘以 16 的相应幂次,然后将结果相加。
例如:十六进制 AF 转十进制
A×16¹ + F×16⁰ = 10×16 + 15×1 = 175
二进制转八进制
方法:从右往左每三位一组,不足三位在左边补 0,然后将每组转换为对应的八进制数字。
例如:二进制 10101 转八进制
010 101 (分组)
2 5 (转换)
结果为 25
二进制转十六进制
方法:从右往左每四位一组,不足四位在左边补 0,然后将每组转换为对应的十六进制数字。
例如:二进制 10101011 转十六进制
1010 1011 (分组)
A B (转换)
结果为 AB
八进制转二进制
方法:将每一位八进制数字转换为对应的三位二进制数字。
例如:八进制 35 转二进制
3 5
011 101
结果为 011101
十六进制转二进制
方法:将每一位十六进制数字转换为对应的四位二进制数字。
例如:十六进制 2F 转二进制
2 F
0010 1111
结果为 00101111
四. 反码 补码
在计算机中,数字通常以二进制形式存储和处理,反码和补码是表示有符号数(正数和负数)的两种编码方式。
反码:
对于一个二进制数,正数的反码与原码相同;负数的反码是对原码的数值位逐位取反(0 变为 1,1 变为 0),符号位不变。
例如,对于 8 位二进制数:
- 正数 5 的原码是 00000101,反码也是 00000101。
- 负数 -5 的原码是 10000101,反码是 11111010。
补码:
正数的补码与原码相同;负数的补码是其反码加 1。
例如,对于 8 位二进制数:
- 正数 5 的原码是 00000101,补码也是 00000101。
- 负数 -5 的原码是 10000101,反码是 11111010,补码是 11111011。
使用补码的主要优点是可以方便地进行加法运算,无需区分正负号,并且可以将减法运算转换为加法运算,简化了计算机的运算逻辑。
五. BCD码和格雷码
BCD 码(Binary-Coded Decimal)是一种用二进制编码表示十进制数字的编码方式。在 BCD 码中,每四位二进制数表示一个十进制数字(0-9)。
常见的 BCD 码有权码和无权码两类。有权 BCD 码中,各位的权值是固定的,例如 8421 码、5421 码、2421 码等。以 8421 码为例,其从高到低各位二进制位对应的权值分别为 8、4、2、1,将各二进制位与权值相乘,并将乘积相加就可得到相应的十进制数。
无权码则没有固定的权值,常用的有余 3 码等。余 3 码是在 8421 码的基础上,把每个数的代码加上 0011(对应十进制数 3)后得到的。
格雷码(Gray Code)是一种无权码,其特点是相邻两个代码之间仅有一位不同,其余各位均相同。这种特性使得在数字系统中进行数字转换时可以减少误码传输的可能性,因为相邻编码的变化只有一位,降低了由于多个位同时变化可能导致的错误。
例如,十进制数 0-9 的 8421 码、典型格雷码和修改格雷码的对应关系如下:
十进制 | 8421 码 | 典型格雷码 | 修改格雷码 |
---|---|---|---|
0 | 0000 | 0000 | 0010 |
1 | 0001 | 0001 | 0011 |
2 | 0010 | 0011 | 0110 |
3 | 0011 | 0010 | 0111 |
4 | 0100 | 0110 | 1110 |
5 | 0101 | 0111 | 1111 |
6 | 0110 | 0101 | 1011 |
7 | 0111 | 0100 | 1010 |
8 | 1000 | 1100 | 1000 |
9 | 1001 | 1101 | 1001 |
格雷码有多种类型,如典型格雷码、修改格雷码等。它们之间可以通过一定的运算相互转换。例如,典型格雷码与修改格雷码的关系是余 3,即某数的修改格雷码可通过该数加 3 后得到的数值的格雷码来获得。
在实际应用中,BCD 码常用于需要将十进制数直接转换为二进制表示的场合,例如数字时钟、计数器等。格雷码则常用于减少数字传输或转换过程中的错误,例如在编码器、磁盘驱动器等设备中。
十进制数转换为典型格雷码的方法如下(以十进制数 7 为例):首先直接将十进制数的首位作为格雷码的首位,然后将该位与下一位进行异或运算得到格雷码的第三位,接着是第三位与第二位异或得到第四位,最后第二位与第一位异或得到第二位。对于 7(8421 码为 0111),转换过程为:首位 0 作为格雷码的首位,0 异或 1 得到第三位为 1,第三位 1 和第二位 1 异或得到第四位为 0,第二位 1 与首位 0 异或得到第二位为 1,所以 7 的典型格雷码为 0100。
典型格雷码转换为十进制数的方法可以通过依次将格雷码右移并与自身进行异或运算,直到格雷码右移到 0,最终得到的结果就是对应的十进制数。
而 8421 码转换为修改格雷码的 Verilog 代码及仿真代码如下(以 4 位二进制为例):
module bcd_2_gray(in,out);
parameter n = 4;
input (n-1:0) in;
output (n-1:0) out;
wire (n-1:0) tmp;
assign tmp = in + 2'd3;
assign out = {tmp(n-1),tmp(n-1:1)^tmp(n-2:0)};
endmodule
timescale 1ns/1ps
module bcd_2_gray_tb();
parameter n = 4;
reg (n-1:0) in;
wire (n-1:0) out;
bcd_2_gray inst(
.in(in),
.out(out)
);
initial begin
in = 4'd0;
#20
in = 4'd1;
#20
in = 4'd2;
#20
in = 4'd3;
#20
in = 4'd4;
#20
in = 4'd5;
#20
in = 4'd6;
#20
in = 4'd7;
#20
in = 4'd8;
#20
in = 4'd9;
#20
$stop;
end
endmodule
六. ASCII码
ASCII 码(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。
它用 7 位或 8 位二进制数来表示字符,总共可以表示 128 个或 256 个不同的字符。包括常见的英文字母(大写和小写)、数字、标点符号、控制字符(如换行、回车等)等。
例如,数字 0 的 ASCII 码是 48(十进制),大写字母 A 的 ASCII 码是 65,小写字母 a 的 ASCII 码是 97 等。
ASCII 码在计算机通信和数据存储中被广泛使用,使得不同的计算机系统能够以统一的方式处理和交换文本信息。
在许多编程语言中,可以通过特定的函数或操作来获取字符的 ASCII 码值,也可以通过 ASCII 码值来获取对应的字符。