前一段时间看到网上有个笑话——世界上有10种人,一种懂二进制的,另一种不懂,这时有人问这不是才2种人吗? 哈哈哈不知你反应过来了吗?这个笑话也侧面反映了理解二进制系统的重要性,请细读下文,待我一步步揭开二进制的面纱。

编程新手在进行文件交互时常会遇到如下问题 什么是解码与编码,它们的本质是什么?在用编程语言进行读入、读出文件时会出现乱码的原因是什么?以及Unicode,UTF-8,GBK编码方式的区别在哪?想要真正的理解透这些问题,那么必须先深入性的了解二进制系统的一些知识。

本文我将从介绍二进制是什么以及与各进制之间转换方式逐步入手。

1、二进制介绍

大家在网上肯定看到过上图这种庞大的数字照片,总给人一种黑客的神秘感,仔细一看,这类照片里的数字都是由0和1构成。在计算机内部里有电路和电线,由它们负责传送所有的信息,那么如何用电来储存或传递信息呢?

我们假设有一条有电流通过的电线,信号只有两种表达方式即打开(ON)和关闭(NO)或者在计算机网络里是高平和低平或对与错,1或0。或者其他只有两个选项的事物。单条线路上的开/关状态被称为一个比特(bit),这就是我们常听到的计算机信息储存中最小量的由来。

我们常用的进制有十进制、二进制和十六进制,我们先来看十进制,例如:7896这个数。这是一位四位数,每一位的数字都是由0~9构成,也就是说十进制的每一位都是小于十的自然数

那么由这个规则我们可以推广到其他进制的数,例如二进制的数每一位都是小于2,即0和1构成,其他进制也同理。

2、各进制之间的转换

同一个数可以用不同进制数来进行表示,它们的意义是一样的,只是看起来不同而已。那么不同进制的数又该如何转换呢? 例如:

如下,我们也可以推广成二进制转十进制,同理其他进制转十进制也可以这么展开。

那么怎么将十进制转为二进制呢?其实这与上就是上面的逆过程,但是太麻烦,有个大家都听过的短除法。例如我们将十进制的18转为二进制数。

小结上面的两个例子就是各进制转十进制十进制转各进制的过程,那么如果N进制转M进制呢?我的建议是先将N进制转成十进制再转成M进制。

3、十六进制

我们再来谈谈十六进制,前面提过计算机是采用二进制进行计算的,但是二进制有个问题就是信息密度低,要用很多位才能表示一个数,不利于人阅读,所以在电脑显示时人们通常让它转为十六进制。

十六进制由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F这十六个字符组成。

二进制数转十六进制数也十分方便,这里有两个方法,一是上边提到的二进制先转成十进制,再转成十六进制;二是从数字的后面即右边开始每四位转一个十六进制数,当到开头是不满四位以零填补就可以了又称8421法

我们使用第二个方法将二进制的 101101101011011100 转换为十六进制,如图从尾开始,四个为一组,我们得到五组四位二进制数

我们将该五组的四位二进制分别转换为十进制,再将十进制相组合的结果就是最终十六进制啦。其十六进制结果为 2DADC  ,如下图。

那么此时我们再考虑一下由十六进制转为二进制,此时使用权重法太过于麻烦,我们刚好可以利用上面第二个方法的逆过程,如下图。

下面贴出二进制转换十进制的C语言代码:

#include <stdio.h>
#include <stdlib.h>
// 二进制转十进制
int main(){char a[17];gets(a);int len,i,sum=0,m,j;len=strlen(a);if(len<=16){for(i=0;i<len;i++){m=1;if(a[i]=='1'){for(j=1;j<=len-i-1;j++)m*=2;sum+=m;}}printf("你输入的二进制数为:%s\n",a);printf("转换为十进制数为:%d\n",sum);}return 0;
}

更多原创文章请关注我的公众号:DataUser

一枚数据分析的爱好者~

世界上有10种人,一种懂二进制的,另一种不懂相关推荐

  1. java 千分之一的概率,世界上几十亿人,两个人相遇的概率为千分之一

    我想,我是自私的.曾经,我与个朋友.我一向被动,我以为我的不言不问,安心做好一个潜水者的本分,默默关注,你会明白,不离不弃.但你离我越来越远,直到我突然发觉已找不到你的身影,原来你我都是过客.想你与我 ...

  2. 长篇小说《世界上最幸福的人》获得好评

    中国作家网消息:5月22日,文化艺术出版社召开旅法青年女作家林风竹"诗画小说"<世界上最幸福的人>作品研讨会.在京的文学评论家.艺术家和编辑家胡平.孟繁华.陈晓明.白烨 ...

  3. 世界上最成功的人一开始是个程序员-《程序员大本营》1999版

    //找到这篇我在1999年出版<程序员大本营>的短文,转眼间已过去11年. 世界上最成功的人一开始是个程序员.在1974年,Bill Gates为Altair 8800写了一个4K的编译器 ...

  4. 魔镜魔镜告诉我谁是世界上最美的人 语音唤醒,百度语音识别。从装系统开始

    魔镜魔镜告诉我谁是世界上最美的人 语音唤醒,百度语音识别.从装系统开始 准备原料 安装树莓系统 准备: 硬件: 软件: 步骤 很高兴,您来到我的小屋,本人diy爱好者,小白,刚刚开始玩树莓派,希望前辈 ...

  5. 世界之最VS谁是世界上最无聊的人

    世界之最VS谁是世界上最无聊的人 <script type="text/javascript"> cpro_client='85023472_cpr';cpro_cbd ...

  6. CEO是世界上最孤独的人

    CEO是世界上最孤独的人,其实我不是CEO.       不知为什么,我长这么大,第一次感觉属于那种高高在上的孤独.       在以前总认为CEO是一个很威风的工作,有名声,有地位,有钱赚,可以要自 ...

  7. 这个世界上最重要的人是你自己

    有网友提问:如何让自己变成一个有品味的人? 首先请记住,并且经常对自己重复一句话--"对我来说,这个世界上最重要的人是我." 之前看到过一个匿名用户谈在北京买房后的感受,他放了两张 ...

  8. 为什么把我当作世界上最穷的人?

    几乎每天都会有人打电话问我缺不缺钱用,有时候一天能有好几个人来关心我. 这不,就今天,截止现在,一天还没有过完,已经有三个人通过电话来关心我这个问题了. 我很感动,我都说我不需要钱. 笑吧,对面的你肯 ...

  9. 杨振宁100周岁 张朝阳:他证明了中国人是世界上最聪明的人

    雷递网 乐天 10月4日 2022年10月1日是著名科学家.诺贝尔物理学奖得主杨振宁先生的100周岁生日. 搜狐视频联合高山科学经典.抖音于9月30日特别举办"科学大家杨振宁百岁华诞&quo ...

最新文章

  1. Android 多线程之可以重复启动与停止的服务
  2. VB.Net中关于数组赋值
  3. go strconv
  4. Android之最好理解的Binder机制
  5. IT信息业、金融业从业人员悲歌
  6. 京东企业租赁11.11:新用户数环比增长786% 订单量环比增长519%
  7. 气体管道管径及流量对照表_建筑用管道产品常见技术质量问答汇总
  8. 深度学习的最新研究进展(三)
  9. oracle11g关闭库,Oracle11g中SYS连接阻止关闭数据库
  10. 性能测试篇 :Jmeter HTTP代理服务器录制压力脚本
  11. 别了 Java EE!开源组织将其更名为Jakarta
  12. 代码仓库-SVN分支策略
  13. jquery 表单验证插件
  14. linux中脚本都是.sh吗,Linux跑脚本用sh和./有什么区别?
  15. linux判断三个数大小程序,几个shell程序设计小知识(shell常识部分)
  16. android加速度传感器 源码,Android项目源码利用加速度传感器实现计步
  17. 嵌入式系统开发笔记15:CJ/T-188 冷热量表协议解析4
  18. 【网易】网易2018实习生招聘笔试题-测试开发实习生
  19. jbox ajax,JBox演示30种不同的调用方法
  20. HDU - 6769

热门文章

  1. 【毕业设计之PHP系列】基于PHP的网络聊天室系统
  2. 基于CFD的数值模拟湍流模型
  3. Simulink系列 - simulink模块库详细介绍
  4. 零宽字符隐写——2021网刃杯CTF 签到
  5. 机械臂控制柜的DO和DI是什么意思
  6. 社交分享拼团持续走红 如何搭建自己的社交拼团平台?
  7. 优漫动游平面设计要学什么软件?
  8. 中职计算机英语教案全,2014中职计算机英语第一课时教学设计.doc
  9. 逻辑推理与判断(谁是窃贼)
  10. 1508-张晨曦总结《2016年-11月-3日》【连续13天总结】