┇铺垫

二进制,简单来说,是一种运算规则,每一位达到“二”就进一位,故称为“二” “进” 制。在我们日常计算里每一位到“十”进一位的十进制,类比一下(如9+1=10),在二进制里的“进位”,1+1应该等于10(“个位”2变0进“十位”1)。

但有一点得注意,上面二进制运算结果“10”在十进制里还是二,而不是十。

┇正题

在学习二进制与十进制相互转换时,会学到下面的转换方法:


  • 十进制转二进制

将十进制表示的数除以二取余数,再将上次运算的商除以二取余数,不断重复,直到商为0结束。最后把余数从后往前依次排列出新的数。

例如:10

10÷2=5······0(❶)

5÷2=2······1(❷)

2÷2=1······0(❸)

1÷2=0······1(❹)

把余数从后往前排,便是1010(❹❸❷❶)


  • 二进制转十进制

将二进制里的数从最左位开始分别乘以2ⁿ(n表示这一位的右边还有几位,最后一位n=0),最后把 各个 位计算后的结果 相加

例如:1010

1×2³ + 0×2² + 1×2¹ + 0×2⁰ = 10


那么问题来了,为什么这样计算就可以达到效果呢?以及为什么要有“从后往前”,“乘以2ⁿ”这些奇怪的方式?

有一种思维方式叫比较推理

我们拿平时最熟悉的十进制来说。

比如“1234”,我们可以把它变形为1×10³+2×10²+3×10¹+4×10⁰,结果还是1234。那么刚刚二进制的“1010”表示的1×2³ +0×2²+1×2¹+0×2⁰ 和上面的式子非常相似。不妨假设,二进制转换十进制的运算实质和这个一样。

一个非负整数可以理解为有多少个1相加

在1×10³+2×10²+3×10¹+4×10⁰这个式子中,10³是表示个位进位到千位要加1的个数多少,如3000就可以表示为3×10³,或者说有3000个1相加。同理后面的也是如此。

那么不难想象在1×2³ +0×2²+1×2¹+0×2⁰里2³,2²,2¹,2⁰也表示是从个位进位到该位要加1的个数多少。

再详细一点

二进制 0 1 10 11 100 101 110 111 1000 ··
十进制0 1 2 3 4 5 6 7 8 ···

二进制中,从一位到两位要加2个1,从一位到三位要加4(2²)个1,从一位到四位要加8(2³)个1,这很容易就可以推出后面的情况。而且很容易理解,因为每一位从0到1再到0要经过两次,那么使这一位变化的要计算两次。


在十进制转二进制中,其实是对上面二进值转十进制的逆向运算

如之前的10÷2=5······0

我们可以把10改写成1×2³ +0×2²+1×2¹+0×2⁰,那么就可以很容易明白,在除以2后,10变成了1×2² +0×2¹+1×2⁰ + 0 前面的部分就是商5,后面的0就是余数。再把1×2² +0×2¹+1×2⁰除以2,5就变了1×2¹+0×2⁰ + 1,前面部分商就是2,后面的1就是余数。同理后面类似

这些余数之所以可以表示为二进制表示中相对应位的值,就是因为将这些个值反过去依次乘二乘回去就会变成原来式子。

至于为何把余数“从后往前”排列,就是因为这是在二进制转十进制的运算结构基础上而来的。越先余的数,除二的次数越少,那么它变化原来的情况乘二次数就越少,那么根据二进制转十进制里的运算结构,就排在最后边。


这就是我对于二进制与十进制相互转换的理解,其目的就是为了让大家熟悉这之间的进位的实质与这些公式背后的缘由。当然这个其实并不全面,这里只涉及到非负整数的情况,至于其它方面,则还需要其他的东西来进行,这里就不再写了(我懒)

这是我粗糙很水的第一篇文章,望大佬批评

c++十进制转二进制_二进制与十进制相互转换的原理相关推荐

  1. java 十进制转二进制代码_求java十进制转二进制代码

    展开全部 下面是根据十进制数62616964757a686964616fe59b9ee7ad9431333365646331转二进制数的算法所写的一段Java程序示例代码: import java.m ...

  2. c++十进制转二进制_二进制与十进制如何互相转换?

    正整数的十进制转换二进制 将一个十进制数除以二,得到的商再除以二,依此类推直到商等于一或零时为止,倒取除得的余数,即换算为二进制数的结果.只需记住要点:除二取余,倒序排列. 由于计算机内部表示数的字节 ...

  3. 二进制十进制十六进制转换_二进制数制到十进制数制的转换

    二进制十进制十六进制转换 Prerequisite: Number systems 先决条件: 数字系统 To convert binary number to its respective deci ...

  4. mysql binlog 二进制_二进制日志-mysqlbinlog工具的使用

    mysqlbinlog是一个客户端程序,可以审查binlog文件及中继日志文件的内容.既可以读取本地也可以读取远程的binlog文件,输出二进制日志的内容. mysqlbinlog常用的选项: -da ...

  5. scp选择二进制_二进制传输与文本传输区别

    Ftp,winscp等工具下载文件时候有选项,可选的有二进制方式和文本方式.文本方式又称为ASCII方式 两者区别如下. ASCII 方式和BINARY方式的区别是回车换行的处理,binary方式不对 ...

  6. 十进制转化为二进制java代码_【模板小程序】任意长度十进制数转化为二进制(java实现)...

    妈妈再也不用担心十进制数过大了233 import com.google.common.base.Strings; import java.math.BigInteger; import java.u ...

  7. c++十六进制转十进制_一文帮你详细图解二进制、八进制、十进制、十六进制之间的转换...

    1.背景(Contexts) 之前使用SQL把十进制的整数转换为三十六进制,SQL代码请参考:SQL Server 进制转换函数,其实它是基于二.八.十.十六进制转换的计算公式的,进制之间的转换是很基 ...

  8. bash 将二进制转换为十进制_一文帮你详细图解二进制、八进制、十进制、十六进制之间的转换...

    1.背景(Contexts) 之前使用SQL把十进制的整数转换为三十六进制,SQL代码请参考:SQL Server 进制转换函数,其实它是基于二.八.十.十六进制转换的计算公式的,进制之间的转换是很基 ...

  9. vivado中如何读取十进制小数_二进制十进制间小数怎么转换,原来是这样的

    二进制十进制间小数怎么转换?感兴趣的小伙伴们快来了解一下吧. 工具/材料 纸.笔 十进制的小数到二进制的转换 01 步骤: 1.小数部分*2: 2.得到的结果*2,取整数部分. 3.得到的结果*2,取 ...

最新文章

  1. 网站特效-------旋转的图片
  2. 史上最全!近千篇机器学习自然语言处理论文!都这儿了
  3. Mac 实用开发工具
  4. 前端特效demo | 值得收藏的6个 HTML5 Canvas 实用案例 1
  5. Java-ServiceLoader类
  6. 万字长文详解如何用 Python 玩转 OpenGL | CSDN 博文精选
  7. @import与link方式的区别
  8. 区块链应用 项目开发步骤
  9. 面向对象---特----性
  10. 考贵大计算机专业研究生,贵州大学(专业学位)计算机技术考研难吗
  11. pg_repack 处理表和索引的膨胀
  12. pscc改变图片字体大小
  13. 蓝牙基础知识进阶——Link Manager通用规则介绍
  14. Hadoop3.x版本安装及其应用部署
  15. Spring Boot配置ssl证书
  16. pikachu XSS Cross-Site Scripting(皮卡丘漏洞平台通关系列)
  17. mysql日期返回周一_MYSQL如何获得指定日期所在周周一的日期?
  18. MyEclipse 安装TFS插件详解
  19. swift 高清截图 ScrollView截图
  20. Android 养成记-1.5 二维码生成+添加logo+识别+扫码

热门文章

  1. Qt工作笔记-使用信号与槽让两个界面进行数据通信
  2. Java高级语法笔记-多个异常处理
  3. docker fdfs修改storage ip
  4. python打字效果_Python学习之旅:用Python制作一个打字训练小工具
  5. pep3评估报告解读_quot;聚焦慢病、助力医改,检验项目风险评估培训计划“大兴区第四期培训班成功举办...
  6. [Android]解决Fragment无法使用android:onClick属性
  7. Android开发:1-3、Android常用布局
  8. 计算机组成原理题目题型总结)第三章:存储器
  9. (王道408考研数据结构)第二章线性表-第三节5:顺序表和链表的比较
  10. error while loading shared libraries: libgconf-2.so.4