目录
前言
1.不同进制的表示方法
2.不同进制之间的对照
3.二进制数转换为其他进制数
3.1二进制数转换为八进制数
3.2任意进制数转换为十进制数
3.3二进制数转换为十六进制数
4.其他进制数转换为二进制数
4.1八进制数转换为二进制数
4.2十进制数转换为任意进制数
4.3十六进制数转换为二进制数
总结
前言
十六进制:(简写为 hex 或下标 16)是一种基数为 16 的计数系统,是一种逢 16 进 1 的进位制。通常用数字 0、1、2、3、4、5、6、7、8、9 和字母 A、B、C、D、E、F(a、b、c、d、e、f)表示,其中: A~F 表示 10~15,这些称作十六进制数字。
十进制数:是组成以10为基础的数字系统,有 0,1,2,3, 4, 5, 6, 7, 8, 9 十个基本数字组成。十进制,英文名称为 Decimal System,来源于希腊文 Decem,意为十。十进制计数是由印度教教徒在 1500 年前发明的,由阿拉伯人传承至 11 世纪。
八进制:Octal,缩写 OCT 或 O,一种以 8 为基数的计数法,采用 0,1,2,3,4,5,6,7 八个数字,逢八进 1。一些编程语言中常常以数字 0 开始表明该数字是八进制。八进制的数和二进制数可以按位对应(八进制一位对应二进制三位),因此常应用在计算机语言中。
二进制:是计算技术中广泛采用的一种数制。 二进制数据是用 0 和 1 两个数码来表示的数。 它的基数为2,进位规则是"逢二进一",借位规则是"借一当二"。 二进制数(binaries)是逢2进位的进位制,0、1是基本算符 ;计算机运算基础采用二进制。
1.不同进制的表示方法
进制 | 范围 | 前缀 | 后缀 |
二进制(Binary) | 0~1 | 0b/0B | b/B |
八进制(Octal) | 0~7 | 0 | o/O |
十进制(Decimal) | 0~9 | 无,可加+/- | d/D |
十六进制(Hexadecimal) | 0~9;A~F(10~15) | 0x/0X | h/H |
例如:
进制 | 前缀表示法 | 后缀表示法 |
二进制 | 0b10000000000 | 10000000000B |
八进制 | 02000 | 2000O |
十进制 | 1024 | 1024D(后缀可加可不加) |
十六进制 | 0x400 | 400H |
注意事项:
- 十六进制中的A~F分别表示数字10~15;
- 在十六进制表示法中,字母"A~F"可以用大写或小写字母来表示。
- 对于大部分编程语言和计算机系统来说,习惯上使用大写字母来表示十六进制中的"A~F",但也可以使用小写字母"a~f"来表示。两者都是有效的,但需要注意保持一致以避免混淆。
- 在写代码的时候,不同的语言甚至是于不同的编程软件对前后缀的识别可能有所不同,C/C++一般使用前缀表示,后缀书写可能出现报错;
2.不同进制之间的对照
3.二进制数转换为其他进制数
3.1二进制数转换为八进制数
- 对于一个二进制混合数(既包含整数部分,又包含小数部分),在转换时应以小数点为界。
- 其整数部分,从小数点开始往左数,将一串二进制数分为3位(八进制)一组,在数的最左边可根据需要加“0”补齐;
- 对于小数部分,从小数点开始往右数,也将一串二进制数分为 3 位一组,在数的最右边也可根据需要加“0”补齐。
- 最终使总的位数为3的整数倍,然后分别用对应的八进制数取代。
【例】:
2⁸ | 2⁷ | 2⁶ | 2⁵ | 2⁴ | 2³ | 2² | 2¹ | 2⁰ |
256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
将每一组的三位分别对照上面这个表格相加得出数值,拼接一起即可,这样说可能不太明白,我列举个表格供大家参考:
二进制对照表 | 计算过程 | 结果 | ||||||||
256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | ||
0 | 0 | 1 | 1 | 1 | ||||||
1 | 1 | 1 | 1+1×2+1×4 | 7 | ||||||
0 | 0 | 0 | 0 | 0 | ||||||
0 | 1 | 0 | 1×2 | 2 | ||||||
. | . | . | . | . | ||||||
0 | 1 | 1 | 1×1+1×2 | 3 | ||||||
0 | 1 | 0 | 1×2 | 2 |
然后从上往下写就是结果(1702.32)₈;可能我叙述的比较麻烦,但是当你写起来是很简单的,我只是叙述的比较清楚,实际上以上的步骤心算即可;
3.2任意进制数转换为十进制数
按权展开相加法 (这种方式适用于任意进制数转换为十进制数)
将任意进制数的各位数码与它们的权值相乘,再把乘积相加,就得到了一个十进制数。这种方法称为按权展开相加法。
【例】:(任意进制数转换为十进制数)
(11011.1)₂ = 1×2⁴ + 1×2³ + 0×2² + 1×2¹ + 1×2⁰ + 1×2⁻¹ = 27.5
(11011.1)₈ = 1×8⁴ + 1×8³ + 0×8² + 1×8¹ + 1×8⁰ + 1×8⁻¹ = 4617.125
(11011.1)₁₆ = 1×16⁴ + 1×16³ + 0×16² + 1×16¹ + 1×16⁰ + 1×16⁻¹ = 69649.0625
3.3二进制数转换为十六进制数
- 对于一个二进制混合数(既包含整数部分,又包含小数部分),在转换时应以小数点为界。
- 其整数部分,从小数点开始往左数,将一串二进制数分为 4 位(十六进制)一组,在数的最左边可根据需要加“0”补齐;
- 对于小数部分,从小数点开始往右数,也将一串二进制数分为 4 位一组,在数的最右边也可根据需要加“0”补齐。
- 最终使总的位数为 4 的整数倍,然后分别用对应的十六进制数取代。
二进制数转换为十六进制数跟转换为八进制的做法基本上一模一样,唯一的区别在于,十六进制是以4位一组;
二进制对照表 | 计算过程 | 结果 | ||||||||
256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | ||
0 | 0 | 1 | 1 | 1×1+1×2 | 3 | |||||
1 | 1 | 0 | 0 | 1×8+1×4 | 12(C) | |||||
0 | 0 | 1 | 0 | 1×2 | 2 | |||||
. | . | . | . | . | . | |||||
0 | 1 | 1 | 0 | 1×4+1×2 | 6 | |||||
1 | 0 | 0 | 0 | 1×8 | 8 |
然后从上往下写就是(3C2.68)₁₆ ;注意十六进制的特性,结果中的12不要直接写成12,为了与10进制区分,一定要写成其对应的字母;
4.其他进制数转换为二进制数
4.1八进制数转换为二进制数
八进制数转换为二进制数有两种方法可用;
方法一:连续转换法;
将八进制数使用按权展开相加法转换为十进制数,然后再由十进制数转化为二进制数;
方法二:倒推法;
根据二进制数转换为八进制数,反推八进制数转换为二进制数;
【例】:
求八进制 24.24 的二进制数:
结果 | 二进制对照表 | ||||||||||
256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | |||
2 | 0 | 1 | 0 | ||||||||
4 | 1 | 0 | 0 | ||||||||
. | . | . | . | ||||||||
2 | 0 | 1 | 0 | ||||||||
4 | 1 | 0 | 0 | ||||||||
将得到的二进制位从上向下拼接即可:(24.24)₈ = (10100.0101)₂
4.2十进制数转换为任意进制数
一个十进制数转换为任意进制数,通常采用基数乘除法。
这种转换方法对十进制数的整数部分和小数部分将分别进行处理,对整数部分采用除基取余法,对小数部分采用乘基取整法,最后将整数部分与小数部分的转换结果拼接起来。
【例】:将十进制数 123.6875 转换成二进制数。
除基取余法(整数部分):整数部分除基取余,最先取得的余数为数的最低位,最后取得的余数为数的最高位(即除基取余,先余为低,后余为高),商为0时结束。
整数部分:
因此整数部分 123=(1111011)₂。
乘基取整法(小数部分):小数部分乘基取整,最先取得的整数为数的最高位,最后取得的整数为数的最低位(即乘基取整,先整为高,后整为低),乘积为1.0(或满足精度要求)时结束。
小数部分:
因此小数部分 0.6875=(0.1011)₂,所以 123.6875=(1111011.1011)₂。
4.3十六进制数转换为二进制数
十六进制数转换为二进制数有两种方法可用;
方法一:连续转换法;
将十六进制数使用按权展开相加法转换为十进制数,然后再由十进制数转化为二进制数;
方法二:倒推法;
根据二进制数转换为十六进制数,反推十六进制数转换为二进制数;
【例】:
求十六进制 24.24 的二进制数:
结果 | 二进制对照表 | ||||||||||
256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | |||
2 | 0 | 0 | 1 | 0 | |||||||
4 | 0 | 1 | 0 | 0 | |||||||
. | . | . | . | ||||||||
2 | 0 | 0 | 1 | 0 | |||||||
4 | 0 | 1 | 0 | 0 | |||||||
将得到的二进制位从上向下拼接即可:(24.24)₁₆= (100100.001001)₂
总结
- 使用进制前后缀可以帮助我们更清楚地理解数字的表示方式,避免混淆不同进制数的意义。
- 同时在计算机编程中,前后缀也有助于指示数字表示的进制,从而避免错误或误解。
- 关于十进制数转换为任意进制数为何采用除基取余法和乘基取整法,以及所取之数放置位置的原理,请结合 r 进制数的数值表示公式思考,而不应死记硬背。
- 在计算机中,小数和整数不一样,整数可以连续表示,但小数是离散的,所以并不是每个十进制小数都可以准确地用二进制表示。例如 0.3,无论经过多少次乘二取整转换都无法得到精确的结果。但任意一个二进制小数都可以用十进制小数表示,希望读者引起重视。