一文带你读懂计算机进制
hi,大家好,我是开发者FTD。在我们的学习和工作中少不了与进制打交道,从出生开始上学,最早接触的就是十进制,当大家学习和使用计算机时候,我们又接触到了二进制、八进制以及十六进制。那么大家对进制的认识和使用是否很清楚呢?今天我就带大家一起深入了解一下计算机中的进制。
进制简介
进位制其实是一种记数的方式,所以也称为进位记数法/位值计数法,可以用有限的数字符号代表所有的数值。可使用数字符号的数目称为基数(英文:radix)或底数,基数为n,即可称n进位制,简称n进制。例如平常生活中我们经常用到的十进制,就是使用10个阿拉伯数字0-9进行记数,所以它的基数就是10,称为十进制。
在计算机的世界里,计算机语言就是二进制,计算机能直接识别二进制数据,其它数据都不能直接识别。
对于任何一个数,我们可以用不同的进位制来表示,他们是等价的,只是表示形式不同而已。
例如:对于十进制数 2021,分别用不同机制表示如下:
- 十进制表示为:
2021102021_{10} 202110
- 二进制表示为::
11111100101211111100101_{2} 111111001012
- 八进制表示为:
374583745_{8} 37458
- 十六进制表示为:
7e5167e5_{16} 7e516
右下标数字代表了是几进制,虽然表示形式不同,不过它们所代表的数值都是一样的,均为2021。
常用的进制
大家都知道,计算机是由二进制组成的,除了我们最常用的十进制外,计算机中常用的进制有二进制、八进制和十六进制。下面我们就分别介绍一下。
十进制
十进制是大家最容易理解的进制,由于有一些天然的因素,比如我们的双手总共有十根手指,所以在人类自发采用的进位制中,就很自然的使用了十进制作为主流的计数方法,而且大部分人从小接受的教育都是掌握十进制的计数方法,所以十进制几乎已经深深的烙印在我们的脑海中了。
十进制有10个基本数字,分别为 0、1、2、3、4、5、6、7、8、9,十进制的基数为10,运算规则为”逢十进一”;
十进制的表示方法有两种,使用下标或者后缀D,例如:
2021102021_{10} 202110
或者在数字后面加上后缀D,如: 2021D
当然由于十进制在日常生活中非常普遍,通常我们可以直接使用数字来表示,默认就是十进制数。
二进制
二进制由于表示简单,运算简单等特点,是计算机技术中广泛采用的一种数制,二进制由两个基本数字组成,分别为0、1,运算规则为”逢二进一”。
为了区别于其他进制,二进制的表示方法也有两种,使用下标或后缀B,例如:
11111100101211111100101_{2} 111111001012
或者在数字后面加上后缀B,如:11111100101B
二进制的特点有:
二进制数中只有两个数码0和1,可用具有两个不同稳定状态的元器件来表示一位数码。
二进制数运算简单,大大简化了计算中运算部件的结构。
二进制天然兼容逻辑运算。
八进制
八进制有8个基本数字,分别为0、1、2、3、4、5、6、7,运算规则为”逢八进一”。
由于二进制数据的基数R较小,所以二进制数据的书写和阅读不方便,为此,在小型机中引入了八进制。八进制的基数n=8=2^3,并且每个数码正好对应三位二进制数,所以八进制能很好地反映二进制。
八进制也有两种表示方法,使用下标或后缀O,例如:
374583745_{8} 37458
或者在数字后面加上后缀O,如:3745O
另外一个八进制数,可以用3个二进制数来表示。例如:
37458=01111110010123745_{8} = 011111100101_{2} 37458=0111111001012
十六进制
十六进制的引入同样是因为二进制数在实际使用中因为位数太长,不容易记忆才提出了十六进制数。
十六进制有16个基本数字,分别为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,运算规则为”逢十六进一”。
十六进制有两种表示方法,使用下标或后缀H,例如:
7e5167e5_{16} 7e516
或者在数字后面加上后缀H,例如:7e5H
一个十六进制数,可以用4位二进制数来表示。例如:
7e516=01111110010127e5_{16} = 011111100101_{2} 7e516=0111111001012
补充小知识-进制的中英文表示:
Binary - 二进制
Octal - 八进制
Hexadecimal - 十六进制
Decimal - 十进制
看完之后是不是知道后缀的字母是什么含义了吧
下面这个表格有助于我们理解各个进制之间的关系:
10进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2进制 | 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 | 10000 |
8进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 20 |
16进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | 10 |
进制转换
我们在上面了解了常用的进制,后面在实际工作中我们可能会在不同的场景下用到不同的进制表示,这就涉及到进制的转换了,那么我们介绍一下常用的进制是如何进行转换的。
1、二进制与十进制之间的转换
十进制转二进制
计算方法:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。最后读数时,从最后一位读起。
例如:
十进制数:2021 转二进制后,二进制数为: 11111100101B
计算过程如下:
第N次 | 十进制数 2021 | 商 | 余数 |
---|---|---|---|
第1次 | 2021 / 2 | 1010 | 1 |
第2次 | 1010 / 2 | 505 | 0 |
第3次 | 505 / 2 | 252 | 1 |
第4次 | 252 / 2 | 126 | 0 |
第5次 | 126 / 2 | 63 | 0 |
第6次 | 63 / 2 | 31 | 1 |
第7次 | 31 / 2 | 15 | 1 |
第8次 | 15 / 2 | 7 | 1 |
第9次 | 7 / 2 | 3 | 1 |
第10次 | 3 / 2 | 1 | 1 |
第11次 | 1 / 2 | 0 | 1 |
计算完成后,从最后一位读起,最后结果为:11111100101B
二进制转十进制
计算方法为:把二进制数按权展开,相加既得十进制数。
例如:
二进制数:11111100101B 转十进制后,十进制数为: 2021
计算过程如下:
二进制 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 1 |
---|---|---|---|---|---|---|---|---|---|---|---|
位数 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
公式 | 2^10 | 2^9 | 2^8 | 2^7 | 2^6 | 2^5 | 0 * 2^4 | 0 * 2^3 | 2^2 | 0 * 2^1 | 2^0 |
结果 | 1024 | 512 | 256 | 128 | 64 | 32 | 0 | 0 | 4 | 0 | 1 |
最后将每一位计算结果相加,即
210+29+28+27+26+25+(0∗24)+(0∗23)+22+(0∗21)+20=1024+512+256+128+64+32+0+0+4+0+1=20212^{10} + 2^9 + 2^8 + 2^7 + 2^6 + 2^5 + (0*2^4) + (0*2^3) + 2^2 + (0*2^1) + 2^0 = 1024 + 512+256+128+64+32+0+0+4+0+1 = 2021 210+29+28+27+26+25+(0∗24)+(0∗23)+22+(0∗21)+20=1024+512+256+128+64+32+0+0+4+0+1=2021
最后计算结果为:2021
2、二进制与十六进制之间的转换
十六进制转二进制
计算方法:十六进制数通过除2取余法,得到二进制数,对每个十六进制数为4个二进制数,不足时在最左边补领。
例如:
十六进制数:7e5H 转二进制后,二进制数为:011111100101B
计算过程如下:
首先,将十六进制7e5数分成三部分7、e、5,分别做除2取余:
第N次 | 十进制数 7 | 商 | 余数 |
---|---|---|---|
第1次 | 7 / 2 | 3 | 1 |
第2次 | 3 / 2 | 1 | 1 |
第3次 | 1 / 2 | 0 | 1 |
7 转换为二进制数得 0111,不足四位,前面补零。
第N次 | 十进制数 14 (e 的十进制数) | 商 | 余数 |
---|---|---|---|
第1次 | 14 / 2 | 7 | 0 |
第2次 | 7 / 2 | 3 | 1 |
第3次 | 3 / 2 | 1 | 1 |
第4次 | 1 / 2 | 0 | 1 |
e 转换为二进制为:1110
第N次 | 十进制数 5 | 商 | 余数 |
---|---|---|---|
第1次 | 5 / 2 | 2 | 1 |
第2次 | 2 / 2 | 1 | 0 |
第3次 | 1 / 2 | 0 | 1 |
5 转换为二进制为:0101,不足四位,前面补零。
最后计算结果为:011111100101B
二进制转十六进制
计算方法:4位二进制数按权展开相加得到1位十六进制数。注意,4位二进制数转成十六进制数是从右到左开始转换,不足时补0。
例如:
二进制数:011111100101B 转十六进制后,十六进制数为: 7e5H
计算过程如下:
首先将二进制数按每4位进行分隔,得到 0111,1110,0101,然后分别计算十六进制数
二进制 | 0 | 1 | 1 | 1 |
---|---|---|---|---|
位数 | 3 | 2 | 1 | 0 |
公式 | 0 * 2^3 | 2^2 | 2^1 | 2^0 |
结果 | 0 | 4 | 2 | 1 |
0∗23+22+21+20=0+4+2+4=70 * 2^3 + 2^2 + 2^1 + 2^0 = 0+4+2+4=7 0∗23+22+21+20=0+4+2+4=7
0111 转换为十六进制为 7
二进制 | 1 | 1 | 1 | 0 |
---|---|---|---|---|
位数 | 3 | 2 | 1 | 0 |
公式 | 2^3 | 2^2 | 2^1 | 0 * 2^0 |
结果 | 8 | 4 | 2 | 0 |
23+22+21+0∗20=8+4+2+0=142^3 + 2^2 + 2^1 + 0 *2^0 = 8+4+2+0=14 23+22+21+0∗20=8+4+2+0=14
0111 转换为十六进制为 e
二进制 | 0 | 1 | 0 | 1 |
---|---|---|---|---|
位数 | 3 | 2 | 1 | 0 |
公式 | 0 * 2^3 | 2^2 | 0 * 2^1 | 2^0 |
结果 | 0 | 4 | 0 | 1 |
0∗23+22+0∗21+20=0+4+0+1=50 * 2^3 + 2^2 + 0 * 2^1 + 2^0 = 0+4+0+1=5 0∗23+22+0∗21+20=0+4+0+1=5
0101 转换为十六进制为 5
最后计算结果为:7e5H
3、十进制与十六进制之间的转换
十六进制转十进制
计算方法为:把十六进制数按权展开,相加既得十进制数。
例如:
十六进制数:7e5H 转十进制后,十进制数为: 2021
计算过程如下:
十六进制数 | 7 | e | 5 |
---|---|---|---|
位数 | 2 | 1 | 0 |
公式 | 7 * 16^2 | 14 * 16^1 | 5 * 16^0 |
结果 | 1792 | 224 | 5 |
7∗162+14∗161+5∗160=1792+224+5=20217 * 16^2 + 14 * 16^1 + 5 * 16^0 = 1792 + 224 + 5 = 2021 7∗162+14∗161+5∗160=1792+224+5=2021
最后计算结果为:2021
十进制转十六进制
计算方法:十进制数除8取余法,即十进制数除8,余数为权位上的数,得到的商值继续除8,依此步骤继续向下运算直到商为0为止。最后读数时,从最后一位读起。
例如:
十进制数: 2021 转十六进制后,十六进制数为: 7e5H
计算过程如下:
第N次 | 十进制数 2021 | 商 | 余数 |
---|---|---|---|
第1次 | 2021 / 16 | 126 | 5 |
第2次 | 126 / 16 | 7 | 14 |
第3次 | 7 / 16 | 0 | 7 |
计算完成后,从最后一位读起,最后结果为:7e5H
总结
通过上面的介绍和例子,相信大家已经对进制有了深刻的认识和理解,一旦你搞懂他们之间的关系,将对我们在工作中遇到的很多疑问就会迎刃而解,也让我们在处理问题上变的更游刃有余。希望上面的讲解能对大家有所帮助,如果有任何这些方面的疑问,欢迎留言骚扰。
技术人,技术魂,每天肝一篇技术文,ヾ(◍°∇°◍)ノ゙哈哈~
关于作者
- GitHub:https://github.com/ForTheDevelopers
- 掘金:https://juejin.cn/user/1204720472953022
- CSDN:https://blog.csdn.net/ForTheDevelopers
- 知乎:https://www.zhihu.com/people/forthedevelopers
- segmentfault:https://segmentfault.com/u/for_the_developers
联系作者
- 微信号:ForTheDeveloper
- 公众号:ForTheDevelopers
一文带你读懂计算机进制相关推荐
- 用程序员计算机算进制,一文带你读懂计算机进制
hi,大家好,我是开发者FTD.在我们的学习和工作中少不了与进制打交道,从出生开始上学,最早接触的就是十进制,当大家学习和使用计算机时候,我们又接触到了二进制.八进制以及十六进制.那么大家对进制的认识 ...
- 一文带你读懂HTTP协议的前世今生
点击上方蓝字关注我们 HTTP,Hypertext Transfer Protocol,超文本协议,是在万维网上传输文件(如文本.图形图像.声音.视频和其他多媒体文件)的规则集.如果web用户打开他们 ...
- 一文带你读懂“经典TRIZ”
本文承接上文<一文带第读懂TRIZ>,下面开始看第二个问题:什么是"经典TRIZ"? 很多书里都有对TRIZ的产生与发展的描述. 我个人在看了很多的书和文献以后,认为: ...
- DNN、RNN、CNN.…..一文带你读懂这些绕晕人的名词
DNN.RNN.CNN.-..一文带你读懂这些绕晕人的名词 https://mp.weixin.qq.com/s/-A9UVk0O0oDMavywRGIKyQ 「撞脸」一直都是娱乐圈一大笑梗. 要是买 ...
- 一文带您读懂FCC、CE、CCC认证的区别
一文带您读懂FCC.CE.CCC认证的区别 参考资料:https://3g.k.sohu.com/t/n411629823 FCC认证,CE认证,CCC认证是产品认证中比较常见的几个认证,前两者经常有 ...
- 机器学习中为什么需要梯度下降_机器学习101:一文带你读懂梯度下降
原标题 | Machine Learning 101: An Intuitive Introduction to Gradient Descent 作者 | Thalles Silva 译者 | 汪鹏 ...
- 简单一文带你读懂Java变量的作用和三要素
Java变量的作用 不只是java,在其他的编程语言中变量的作用只有一个:存储值(数据) 在java中,变量本质上是一块内存区域,数据存储在java虚拟机(JVM)内存中 变量的三要素 变量的三要素分 ...
- 一文带你读懂感知机的前世今生(上)
一文带你读懂感知机的前世今生 前言 男女不分 什么是神经元 M-P神经元 全或无定律 McCulloch和Pitts 一种高度简化的模型 MP神经元和真值表 MP神经元的几何理解 后记 参考 前言 男 ...
- 《一文带你读懂:云原生时代业务监控》
点击上方蓝字关注我们! 对业务来说,完备的应用健康性和数据指标的监控非常重要,通过采集准确的监控指标.配置合理的告警机制,我们能够提前或者尽早发现问题,并做出响应.解决问题,进而保证产品的稳定性,提升 ...
最新文章
- 利用c语言检测气体浓度,一氧化碳气体检测仪的算法设计
- 安卓开发37:自定义的HorizontalScrollView类,使其pageScroll的时候焦点不选中
- 编写一个弹出式菜单的shell程序_分享一个有趣的shell脚本--实现抓阄程序
- JS时间戳格式化日期时间
- Android开发之Java基础JVM和ClassLoader以及类加机制面试题
- “别了,小黄文” 微信打击低俗小说:2019年处理违规账号6.6万+
- 都安排上了!春晚主持阵容、春晚直播平台、春晚餐桌C位
- UVA11310 Delivery Debacle【铺砖问题】
- 推荐一款好用的jquery弹出层插件——wbox
- iis运行html提示500错误,IIS7出现HTTP错误500.22的解决办法
- ntko php,NTKO OFFICE文档控件
- 面对疫情,大学生如何保持良好的心理状态
- 编程开发常用词汇(持续更新)
- 计算机串口故障,电脑故障:主板串口接口故障的维修方法总结
- 服务器搭建织梦cms系统,零基础使用织梦cms搭建自己的网站「织梦建站」
- 23位子网掩码是多少_子网掩码23位的是多少
- FME格式转换学习笔记之一:CAD的数据分析及FME对CAD数据的转换
- 前端样式--------页码中间两个省略号
- mysql删除多表视图数据,【杂谈】怎样删除mysql数据表视图中数据
- 【数据分析之道】数据分析导读
热门文章
- 论文学习9-Bidirectional LSTM-CRF Models for Sequence Tagging(LSTM,BILSTM,LSTM-CRF,BILSTM-CRF
- 介绍一些知识图谱的实际应用类项目
- 正则控制可以输两位小数、负数,整数
- 关于HotSpot VM以及Java语言的动态编译 你可能想知道这些
- win10安装RabbitMQ
- Win7x64_chromeX86_相关路径
- [转]2016年Web前端面试题目汇总
- Repository 返回 IQueryable?还是 IEnumerable?
- 数据结构与算法——搜索
- CentOS 7 安装并启动Nginx