二进制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统。

*简介20世纪被称作第三次科技革命的重要标志之一的计算机的发明与应用,因为数字计算机只能识别和处理由‘0’.‘1’符号串组成的代码。其运算模式正是二进制。19世纪爱尔兰逻辑学家乔治布尔对逻辑命题的思考过程转化为对符号"0''.''1''的某种代数演算,二进制是逢2进位的进位制。0、1是基本算符。因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。

二进制和十六进制,八进制一样,都以二的幂来进位的。

优点

数字装置简单可靠,所用元件少;

只有两个数码0和1,因此它的每一位数都可用任何具有两个不同稳定状态的元件来表示;基本运算规则简单,运算操作方便。

缺点

用二进制表示一个数时,位数多。因此实际使用中多采用送入数字系统前用十进制,送入机器后再转换成二进制数,让数字系统进行运算,运算结束后再将二进制转换为十进制供人们阅读。

二进制和十六进制的互相转换比较重要。不过这二者的转换却不用计算,每个C,C++程序员都能做到看见二进制数,直接就能转换为十六进制数,反之亦然。

我们也一样,只要学完这一小节,就能做到。

首先我们来看一个二进制数:1111,它是多少呢?

你可能还要这样计算:1 * 2^0 + 1 * 2^1 + 1 * 2^2 + 1 * 2^3 = 1 * 1 + 1 * 2 + 1 * 4 + 1 * 8 = 15。然而,由于1111才4位,所以我们必须直接记住它每一位的权值,并且是从高位往低位记,:8、4、2、1。即,最高位的权值为2^3 = 8,然后依次是2^2 = 4,2^1=2,2^0 = 1。

记住8421,对于任意一个4位的二进制数,我们都可以很快算出它对应的10进制值。

下面列出四位二进制数xxxx 所有可能的值(中间略过部分)

仅4位的2进制数快速计算方法十进制值十六进值

1111 = 8 + 4 + 2 + 1 = 15 F

1110 = 8 + 4 + 2 + 0 = 14 E

1101 = 8 + 4 + 0 + 1 = 13 D

1100 = 8 + 4 + 0 + 0 = 12 C

1011 = 8 + 0 + 2+ 1 = 11 B

1010 = 8 + 0 + 2 + 0 = 10 A

1001 = 8 + 0 + 0 + 1 = 9 9

....

0001 = 0 + 0 + 0 + 1 = 1

0000 = 0 + 0 + 0 + 0 = 0 0

二进制数要转换为十六进制,就是以4位一段,分别转换为十六进制。

如(上行为二制数,下面为对应的十六进制):

1111 1101 ,1010 0101 ,1001 1011

F D ,A 5 ,9 B

反过来,当我们看到FD时,如何迅速将它转换为二进制数呢?

先转换F:

看到F,我们需知道它是15(可能你还不熟悉A~F这六个数),然后15如何用8421凑呢?

应该是8 + 4 + 2 + 1,所以四位全为1 :1111。

接着转换D:

看到D,知道它是13,13如何用8421凑呢?应该是:8 + 4 + 1,即:1101。

所以,FD转换为二进制数,为:1111 1101

由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转换成2进制。

比如,十进制数1234转换成二制数,如果要一直除以2,直接得到2进制数,需要计算较多次数。所以我们可以先除以16,得到16进制数:

被除数计算过程商余数

1234 1234/16 77 2

77 77/16 4 13 (D)

4 4/16 0 4

结果16进制为:0x4D2

然后我们可直接写出0x4D2的二进制形式:0100 1101 0010。

其中对映关系为:

0100 -- 4

1101 -- D

0010 -- 2

同样,如果一个二进制数很长,我们需要将它转换成10进制数时,除了前面学过的方法是,我们还可以先将这个二进制转换成16进制,然后再转换为10进制。

下面举例一个int类型的二进制数:

01101101 11100101 10101111 00011011

我们按四位一组转换为16进制:6D E5 AF 1B

*基本运算

二进制数据的算术运算的基本规律和十进制数的运算十分相似。最常用的是加法运算和乘法运算。

折叠1.二进制加法

有四种情况:0+0=0

0+1=1

1+0=1

1+1=10

ps:0 进位为1

【例1103】求(1101)2+(1011)2 的和

解:

1 1 0 1

+1 0 1 1

-------------------

1 1 0 0 0

折叠2.二进制乘法

有四种情况:0×0=0

1×0=0

0×1=0

1×1=1

【例1104】求(1110)2 乘(101)2 之积

解:

1 1 1 0

×1 0 1

-----------------------

1 1 1 0

0 0 0 0

1 1 1 0

-------------------------

1 0 0 0 1 1 0

(这些计算就跟十进制的加或者乘法相同,只是进位的数不一样而已,十进制的是到十才进位这里是到2就进了)

3.二进制减法

0-0=0,1-0=1,1-1=0,10-1=1。

4.二进制除法

0÷1=0,1÷1=1。[1-2]

5.二进制拈加法

拈加法二进制加减乘除外的一种特殊算法。

拈加法运算与进行加法类似,但不需要做进位。此算法在博弈论(Game Theory)中被广泛利用

计算机中的十进制小数转换二进制

计算机中的十进制小数用二进制通常是用乘二取整法来获得的。

比如0.65换算成二进制就是:

0.65 * 2 = 1.3 取1,留下0.3继续乘二取整

0.3 * 2 = 0.6 取0,留下0.6继续乘二取整

0.6 * 2 = 1.2 取1,留下0.2继续乘二取整

0.2 * 2 = 0.4 取0,留下0.4继续乘二取整

0.4 * 2 = 0.8 取0,留下0.8继续乘二取整

0.8 * 2 = 1.6 取1,留下0.6继续乘二取整

0.6 * 2 = 1.2 取1,留下0.2继续乘二取整

.......

一直循环,直到达到精度限制才停止(所以,计算机保存的小数一般会有误差,所以在编程中,要想比较两个小数是否相等,只能比较某个精度范围内是否相等。)。这时,十进制的0.65,用二进制就可以表示为:1010011。

还值得一提的是,在目前的计算机中,除了十进制是有符号的外,其他如二进制、八进制、16进制都是无符号的。

*进制转换

十进制数转换为二进制数、八进制数、十六进制数的方法:

二进制数、八进制数、十六进制数转换为十进制数的方法:按权展开求和法

折叠1.二进制与十进制间的相互转换:

(1)二进制转十进制

方法:“按权展开求和”

例:(1011.01)2 =(1×2^3+0×2^2+1×2^1+1×2^0+0×2^(-1)+1×2^(-2) )10

=(8+0+2+1+0+0.25)10

=(11.25)10

相关文档
最新文档