ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[计算机基础系列文章(四)]关于二进制

2022-03-03 00:03:08  阅读:375  来源: 互联网

标签:运算 二进制 左移 补码 负数 文章 计算机


什么是二进制

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等。

补码

把补数用到计算机对数的处理上,就是补码。

原码求补码,分为以下两种情况:

  1. 正数
    正整数的补码是其二进制表示,与原码相同
  2. 负数
    负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1。

运算

任何有模的计量器,均可化减法为加法运算,就是取反后加1。
以计算 1 - 1 举例:
计算机在运算 1 - 1的时候,实际上是执行的 1 + (-1) 。

  1. 计算-1的二进制,实际上就是计算1的补数
    在这里插入图片描述
  2. 计算 1 + (-1),结果为0
    在这里插入图片描述

乘法

乘法可以用加法和位运算左移来实现,这里简单说下左移。

规则:

  1. 左移后空出来的低位用0补充
  2. 左移后使最高位溢出的数字,直接丢弃

举例说明:

# 将变量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)填充高位即可。
在这里插入图片描述

二进制与十进制的换算

分两步:

  1. 将二进制的各数位的值和位权相乘
  2. 将相乘的结果相加的结果就是十进制数

图解:
在这里插入图片描述

位权:
上图中 2的N次方就是位权,如果是十进制就是10的N次方,十六进制就是16的N次方

注意:该算法同样适用于其他进制

系列文章

上一篇:[计算机基础系列文章(三)]程序跑起来的核心-CPU

标签:运算,二进制,左移,补码,负数,文章,计算机
来源: https://blog.csdn.net/haolinbird/article/details/123161997

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有