[计算机基础系列文章(四)]关于二进制
作者:互联网
什么是二进制
1679年3月15日戈特弗里德·威廉·莱布尼茨发明了一种计算法,用两位数代替原来的十位数,进位规则是“逢二进一”,借位规则是"借一当二"。
计算机程序为什么使用二进制来表示各种数据
这个要从硬件说起,计算机硬件实际上是由IC(集成电路)这种电子部件构成。
包括CPU和内存都是IC的一种。
IC包含多个引脚,所有引脚只有直流电压0V和5V两个状态,就是说IC一个引脚只能表示两个状态,而这个特性决定了计算机信息数据只能用二进制数来处理。
信息的单位
最小单位:
计算机处理信息的最小单位-位(英文单词缩写bit),相当于二进制中的一位。
基本单位
计算机处理信息的基本单位是8位二进制数(8 bit),称为字节(英文单词缩写byte)。
字节是最基本的信息计量单位,内存和磁盘都是使用字节来存储和读写数据。
例如:32位处理器一次可以处理32位(4字节)的二进制数据,64位处理器一次可以64位(8字节)的二进制数据。
二进制的运算
计算机的运算分为算术运算和逻辑运算
二进制的算术运算
加法
加法有四种情况: 0+0=0,0+1=1,1+0=1,1+1=10(0 进位为1)
需要注意的点:计算机在做加法时,由于两个二进制数相加的结果可能超过了原有的位数,针对超过的位数计算机会截断丢弃掉,保留剩下的,即溢出,导致可能得不到正确的结果,比如两个正数相加结果为负数。
减法
计算机在做减法的时候,实际上是做的加法,加负数来实现。
例如 1-1时,实际上是执行的 1 + (-1) 来完成。
在介绍减法之前,先解释下二进制是符合来表示负数的。
负数
二进制标识负数时,一般会把最高位作为符号来使用,0表示整数,1表示负数。
那么如何表示 -1 ? 这里涉及另外一个知识,补码。
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。
模
在介绍补码概念之前,先介绍一下“模”的概念。
表示n位的计算机计量范围是0~2的N次方 - 1,模=2的N次方。
“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。
例如:以时钟为例,时钟的模为12,在12为模的系统里,加10和减2效果是一样的,因此凡是减2运算,都可以用加10来代替。所以对“模”而言,2和10互为补数。实际上只要两者相加等于模互为补数,例如11和1,9和3等。
补码
把补数用到计算机对数的处理上,就是补码。
原码求补码,分为以下两种情况:
- 正数
正整数的补码是其二进制表示,与原码相同 - 负数
负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1。
运算
任何有模的计量器,均可化减法为加法运算,就是取反后加1。
以计算 1 - 1 举例:
计算机在运算 1 - 1的时候,实际上是执行的 1 + (-1) 。
- 计算-1的二进制,实际上就是计算1的补数
- 计算 1 + (-1),结果为0
乘法
乘法可以用加法和位运算左移来实现,这里简单说下左移。
规则:
- 左移后空出来的低位用0补充
- 左移后使最高位溢出的数字,直接丢弃
举例说明:
# 将变量a的值左移两位
a = 39
b = a << 2;
# 移位前十进制数39用2进制表示是 00100111,左移两位后是10011100,转化成十进制数就是156
图解
相当于乘4
除法
位运算
左移
左移后,在空出来的最高位补0。
右移
进行算术右移时,如果数值是用补数表示的负数值,那么右移后空出来的最高位补1,如果是正数,在最高位补0。
二进制的逻辑运算
逻辑运算是指对二进制数各数字位的0和1分别进行处理的运算,包括非、与、或、异或四种。
逻辑运算时,不要把二进制数当成数值,应该把它们看做是开关(1是ON ,0是OFF)。
非(not)
指0变成1,1变成0的取反操作的运算。
与(and)
两个都是1时,结果为,其他情况结果都为0的运算。
或(or)
至少有一方是1时,运算结果为1,其他情况结果都为0的运算。
异或(xor)
排斥相同数值的运算。
当其中一方是1,另一方是0时,运算结果为1,其他情况结果都为0的运算。
位运算
左移
左移后,在空出来的最高位补0。
右移
当进行逻辑右移时,移位后需要在最高位补0。
二进制的符号扩充
以8位二进制数举例,符号扩充就是指在保持值不变的前提下将其转化为16位或32位的二进制数。
规则:不管是正数还是负数,都只需要用符号位的值(0或1)填充高位即可。
二进制与十进制的换算
分两步:
- 将二进制的各数位的值和位权相乘
- 将相乘的结果相加的结果就是十进制数
图解:
位权:
上图中 2的N次方就是位权,如果是十进制就是10的N次方,十六进制就是16的N次方
注意:该算法同样适用于其他进制
系列文章
上一篇:[计算机基础系列文章(三)]程序跑起来的核心-CPU
标签:运算,二进制,左移,补码,负数,文章,计算机 来源: https://blog.csdn.net/haolinbird/article/details/123161997