今天,我们来谈谈:“什么是二进制”

首先,你要记住并且不要问为什么:“在计算机中,所有的数据,最终都是使用二进制数表达的。

比如,你的电脑是32位系统,还是64位系统。其实,说的是你的电脑的计算存储能力,能够计算存储2的32次方之多的数据,或2的64次方之多的数据。一看到32,64,可能有些人会说,电脑怎么才计算存储这么点数据呀?且慢,我先带你算算2的32次方或64次方是多少。

——————————————————————————————————————

1:2的0次方

2:2的1次方(第 1 个手指)

4:2的2次方(第 2 个手指)【2(次方)2得四】

8:2的3次方(第 3 个手指)【3(次方)八,这…】

16:2的4次方(第 4 个手指)【4(次方)4十六】

32:2的5次方(第 5 个手指)【5(次方)等于32中的3+2】

64:2的6次方(第 6 个手指)【6(次方)对应64】

128:2的7次方(第 7 个手指)【七(次方)和1音形都很相近】

256:2的8次方(第 8 个手指)【八(次方)和二,就10分完美】

512:2的9次方(第 9 个手指)【九(次方)五之尊】

1024:2的10次方(第 10 个手指)【10(次方)对应1024】

从2的0次方到10次方,哪怕做不到脱口而出,起码也要做到屈指可数

——————————————————————————————————————

2048:2的11次方

4096:2的12次方

8192:2的13次方

16385:2的14次方

32768:2的15次方

65536:2的16次方

131072:2的17次方

262144:2的18次方

524288:2的19次方

1048576:2的20次方

——————————————————————————————————————

…………

…………

…………

太多了,算不下去了。有兴趣的自己算吧。看看你还敢不敢说2的32次方或64次方小。

好了,言归正传,好好来理解一下“二进制”的精髓。

先拿一个二进制的整数来说:

0111,在二进制中,是这样理解的:0X(2的3次方) + 1X(2的2次方) + 1X(2的1次方) + 1X(2的0次方) = 0X8 + 1X4 + 1X2 + 1X1 = 7。

————————————————————————————————————————

解读:从该某某进制的数的小数点左边第一位往左算,分别对应乘以该进制的0次方->乘以该进制的1次方->乘以该进制的2次方->乘以该进制的3次方…

再拿一个二进制的小数来说:

0.0111,在二进制中,是这样理解的:0X(2的-1次方) + 1X(2的-2次方) + 1X(2的-3次方) + 1X(2的-4次方) = 0X(1/2) + 1X(1/4) + 1X(1/8) + 1X(1/16) = 你自己算吧。

————————————————————————————————————————

解读:从该某某进制的数的小数点右边第一位往右算,分别对应乘以该进制的-1次方->乘以该进制的-2次方->乘以该进制的-3次方->乘以该进制的-4次方…

题外话:不要告诉我不懂“负次方”!负次方:一个数的正次方的倒数,即为其负次方。

所以,二进制的数,转换成十进制,很简单。

只需将该二进制的数,按照小数点左边和右边,写成加权系数展开式,然后按十进制加法规则求和。这种做法称为"按权相加"法。

例:

二进制的:

0111.0111 = 0X(2的3次方) + 1X(2的2次方) + 1X(2的1次方) + 1X(2的0次方) + 0X(2的-1次方) + 1X(2的-2次方) + 1X(2的-3次方) + 1X(2的-4次方) = 0X8 + 1X4 + 1X2 + 1X1 + 0X(1/2) + 1X(1/4) + 1X(1/8) + 1X(1/16) = 你自己算吧。

那反过来,十进制的数,如何转换成二进制?

讲这个之前,先看个例子:

假设十进制整数A,转换成二进制数为dcba的形式,那么用"按权相加"法,得:

A = a X (2的0次方) + b X (2的1次方) + c X (2的2次方) + d X (2的3次方)

等式左右两边同时除以2,得:

A/2 = a X (2的0次方)/2 + b X (2的1次方)/2 + c X (2的2次方)/2 + d X (2的3次方)/2

上面等式右边,因为只有 a 是乘以 2的0次方 这一项,所以被2除不开而被余下来;

所以第一次除以2,将得到余数,即其二进制的小数点左边第一位 a ;

上面等式右边,把 a 取出来,得到的商:b X (2的0次方) + c X (2的1次方) + d X (2的2次方) 第二次除以2,得:

b X (2的0次方)/2 + c X (2的1次方)/2 + d X (2的2次方)/2

上面式子中,因为只有 b 是乘以 2的0次方 这一项,所以被2除不开而被余下来;

所以第二次除以2,将得到余数,即其二进制的小数点左边第二位 b ;

……

以为类推,除以2取余数得到的商再除以2再取余数,将不断得到其二进制的小数点左边第一二三四……位 abcd 。

再看个例子:

假设十进制小数B,转换成二进制数为0.efgh的形式,那么用"按权相加"法,得:

B = e X (2的-1次方) + f X (2的-2次方) + g X (2的-3次方) + h X (2的-4次方)

等式左右两边同时乘以2,得:

BX2 = e X (2的-1次方) X2 + f X (2的-2次方) X2 + g X (2的-3次方) X2 + h X (2的-4次方) X2

上面等式右边,因为只有 e 是乘以 2的-1次方 这一项,所以乘以2而变成整数;

所以第一次乘以2,将得到整数部分,即其二进制的小数点右边第一位 e ;

上面等式右边,把 e 取出来,剩下的小数部分:f X (2的-1次方) + g X (2的-2次方) + h X (2的-3次方) 第二次乘以2,得:

f X (2的-1次方) X2 + g X (2的-2次方) X2 + h X (2的-3次方) X2

上面式子中,因为只有 f 是乘以 2的-1次方 这一项,所以乘以2而变成整数;

所以第二次乘以2,将得到整数部分,即其二进制的小数点右边第二位 f ;

……

以为类推,乘以2取整数部分剩下的小数部分再乘以2再取整数部分,将不断得到其二进制的小数点右边第一二三四……位 efgh 。

时间: 2024-10-07 09:53:18

今天,我们来谈谈:“什么是二进制”的相关文章

谈谈二进制

今天来说说二进制的始终,首先,目前流行计算机架构都是冯诺依曼体系,冯诺依曼体系有个重要的约束吧,应该可以这么说,就是计算机采用二进制表示数据,之所以要用二进制呢,1,简单,硬件容易实现,2,具有容错性,认为高于某个值的电压认为就是表示1,比如约定,高于3v的电压表示1,那么3,3.5,4...都可以表示‘1‘. 然后为了帮助你们理解二进制,我先聊聊进制.我们的生活里大多数场合采用10进制,也就是伸出你们双手,正常人是有十个手指,我们程序员都是从0开始计数的,给你的手指编号,0—9,对吧,10个手

谈谈计算机和网络常用进位制:二进制(Binary)、十进制(Decimal)和十六进制(He

谈谈计算机和网络常用进位制:二进制(Binary).十进制(Decimal)和十六进制(Hexadecimal) 二进制.十进制和十六进制,这几个个进制里算十进制我们最熟悉了,从学前教育或者幼儿园最先接触的数学到再我们日常生活几乎天天和他打交道的下面这十个数字. 但是,话又说回来,你真的理解这10个数字吗?或者说你理解十进制吗? 今天我们就以十进制为切入点顺便谈谈二进制.十六进制以及它们之间的转换.在谈这些进制之前我们先了解一下进制的概念: 所谓进制就是进位制,是人们规定的一种进位方法.进位制/

第三讲,我们来谈谈:“二进制的负数”

首先,你要记住并且不要问为什么:"在计算机中,所有的数据,最终都是使用二进制数表达的." 还要记住并且不要问为什么:"在计算机中,正数是直接用原码来表示和存储的." 要记住并且不要问为什么:"在计算机中,负数是以它的补码(即它的反码+1)来表示和存储的." 对于允许是负数的数值(称为带符号的数值),必须先确定一个固定的长度(换言之,就是二进制数的位数),再把最左边的最高位设置为符号位.必须固定位数,这样才能避免符号位与其他位的混淆. 只要知道每个

第二讲,我们来谈谈:“什么是二进制”

首先,你要记住并且不要问为什么:"在计算机中,所有的数据,最终都是使用二进制数表达的." 比如,你的电脑是32位系统,还是64位系统.其实,说的是你的电脑的计算存储能力,能够计算存储2的32次方之多的数据,或2的64次方之多的数据.一看到32,64,可能有些人会说,电脑怎么才计算存储这么点数据呀?且慢,我先带你算算2的32次方或64次方是多少. -------------------------------------- 1:2的0次方 2:2的1次方(第 1 个手指) 4:2的2次方

谈谈流密码

这篇文章来谈谈流密码,这也是我本人的研究方向. 假设老王是一个工作在国外的特工,需要把获得的紧急情报传回国内总部.但是敏感的网络都会有监视,所以他不能直接发明文,必须把情报加密以后才能发出去.假设情报是电子版的,内容比较多,可能有好几 G,老王必须尽可能快的把消息发出去,那么老王应该怎样加密,才能既保证安全性(不被对手破译),又能兼顾效率(国内的同事可以很快解密)呢? 这可难不倒老王.情报么,就是一串有规律的 0-1 序列而已:加密么,就是用某种自己人才能 "看得懂" 的方式把它打乱变

谈谈EJB是如何发布Web Service的

定义 我们经常会听到,xx项目中用到了Web Service.那么,什么是Web Service呢? 首先让我们来了解一下Web Service.Web Service技术,就是能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.依据Web Service规范实施的应用之间,无论它们所使用的语言.平台或内部协议是什么,都可以相互交换数据.Web Service是自描述.自包含的可用网络模块,可以执行具体的业务功能. Web service是一个平台独

JS 中的二进制操作简介

from 作者:刘骥(@刘骥-JimLiu)网址:http://jimliu.net/2015/09/26/a-brief-look-at-binary-ops-in-js/ 写这篇博客的起源是在div.io上的一篇文章<你所不知道的JavaScript数组>by 小胡子哥下的评论中的讨论. 因为随着XHR2和现代浏览器的普及,在浏览器当中处理二进制不再向过去那样无所适从,随着Canvas/WebGL等新技术逐渐开始进入大众视野,也会用到一些字节数组或者16位.8位整数等东西.在node.js

谈谈Linux应用程序 ABI兼容性

谈谈Linux应用程序ABI兼容性 背景 最近工作中遇到个问题,就是多个系统跑着不同版本的内核,不同架构的ARM芯片,上层的业务程序能否二进制归一(共镜像). 根据自己对Linux的了解,glibc是否可以在ABI层面做到向前兼容.那个整个系统能否做到呢?这勾起了我的分析和思考. ABI兼容依赖什么 试想一下,一个程序从源代码到最终的二进制,有哪些组件参与了编译和链接过程,大概如下: 内核导出用户态头文件 gcc编译器,gcc提供的静态.o/.a,以及它提供的动态库(如libgcc_s.so)

文本协议与二进制协议的选择

进行网络通信时,我们经常纠结于到底使用什么样的协议传输数据,下面我谈谈应该怎么选择一种合理的协议格式. 网络协议 标准定义是这样的: 为计算机网络中进行数据交换而建立的规则.标准或约定的集合. 网络协议至少包括三要素: 语法:语法是用户数据与控制信息的结构与格式,以及数据出现的顺序. 语义:解释控制信息每个部分的意义.它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应. 时序:时序是对事件发生顺序的详细说明. 人们形象地把这三个要素描述为:语义表示要做什么,语法表示要怎么做,时序表示