1.进位计数制
为什么我们日常使用是十进制?
主要是:我们有十根手指头,逢十进一符合我们的思想。
为什么计算机会使用二进制?
主要是:
1. 二进制所需要的基数最少,我们可以在制作计算机的时候降低成本,只需要两个稳定状态的物理器件即可。
2. 0和1刚好也可以对应逻辑值的假和真,方便计算机使用逻辑运算。
3. 可以很方便的使用逻辑门电路实现算数运算。
怎么将十进制转换为任意进制?
1.除基取余法(整数部分)
先得到的余数是最低位,依次类推
2.乘基取整法(小数部分)
先得到的整数是最高位,依次类推
扩展一个知识点
真值: 实际的带正负号的数值(人类习惯的样子)
机器数: 把正负号数字化的数(存到机器里的样子)
2.BCD码
概念:BSD码是使用二进制编码的十进制,出现的原因就是为了解决十进制转换为二进制麻烦的问题。
8421码的概念
8421码的运算
原理:如果相加的数落在1010(10) ~ 1111(15) 需要进行 + 6(0110强制向高位进1)处理
3.无符号整数
无符号整数的表示
无符号整数的运算
无符号整数的加法:从最低位开始 按位相加,并往更高仪进位。
计算机硬件如何做无符号整数的减法“被减数”不变,
1.减数”全部位按位取反、
2.减法变加法末位+从最低位开始,按位相加,并往更高位进位。
我想你看完上述,肯定会有疑问,为什么要减法变加法呢?
原因是:加法电路造价便宜,减法电路造价昂贵,若可将减法转变为加法,省钱!
那又为什么可以这样做呢?
原因是: 将减法转换为加法的基本原理是利用了补码表示法的性质。在补码表示法中,每个数字的负值都是其对应正值的补码形式。这意味着,减法可以通过加法和补码的转换来实现。
4.带符号整数
1个符号位 + 剩下的都是数值位
带符号整数的表示
带符号整数的运算
原码的缺点:符号位不能参与运算,需要设计复杂的硬件电路才能处理,费钱 ! 贵 !
在带符号整数得到计算中,采用了补码计算法
为什么计算的时候都需要用补码呢?
如果我们计算的时候都实现原码计算,正数并不会出现什么问题,但是设计到负数就会出现问题,好比10000001(-1) + 1的话就会等于 10000002 也就是 - 2,这样计算是肯定不对的。这就相当于数轴一样,+1负数跑反了
怎么才能解决这样的问题呢?就会引入反码(原码基础上,数值位全部按位取反),就相当于把数轴反转了
这样就会得到正确的数据?但是这样还会存在一个问题!
通过上图就可以看出来问题的所在,为什么会出现 +0 和 -0,这样会导致出现的问题,比如说 - 4 + 7 按理说应该是 3 而因为有 -0的存在 -4 + 4 = -0 + 1 = + 0 + 2 = 2 这样就会出现了错误,何以解决这个问题?如果是你肯定会想,删除一个0就好了,我们的计算机大佬们也是这样处理的,这样就会引入补码,反码 + 1 (因为反转数轴了)负数二进制加1 也是 真值-1,这样就会使负数的最大范围变成 - 128。
总结一下吧:原码的弊端就是无法处理负数计算的问题,因此就引入了反码解决这一问题,而反码的问题解决负数计算时跨0的会出现两个0,因此就引入了补码。计算机中的存储和计算都是以补码的形式进行的,这样就不会出现计算出现问题了。
因此也可以扩展以下知识点:
为什么强制转换会造成精度损失?
多余的位数被删除了,删除的数值位,如果有值就会进行损失。
运算符是怎么通过二进制计算的?
&(逻辑与) 含义并且(同时满足成立),|(逻辑或) 含义或者(满足一个成立)。
根据上述,你可能又会有疑问了,我们写代码的时候不都是使用 && 来判断是否同时满足吗?为什么这里介绍的是&?
主要原因:还是&&叫短路按位与,所谓短路就是因为&同时满足成立,是不是第一个错了,我压根没有必要判断第二条件是否成立,就可以返回false了,如果我们使用&就会判断两次,这样做的效率是远远不及&&的。
在扩展一个运算符优先级的图吧
5.定点小数
因为其余部分都是定点整数一样,就不一一分析了。
与定点整数的不同之处
6.奇偶校验和
校验和出现的原因:防止计算机元器件发生故障或者被环境干扰,导致在计算机内部存储传输的二进制数据会发生错误,所以我们就必须考虑数据校验的问题。奇偶校验就是发现错误的一种编码机制。
原理介绍,计算机硬件是怎么计算校验位的值的和怎么实现校验的?
但是奇偶校验和存在一项很大的弊端,如果反转偶数位个bit数据就会无法校验。
不要担心数据会发生错误,因为在传输层传输数据的时候,TCP协议有一个16位的校验和,识别出错的数据,是一个字符串,比原始数据要小,但是是通过原始数据产生的,这个校验和很难出现错误:原理是
发送端:
- 发送端将数据分成适当大小的段,并为每个段计算校验和(通常使用16位的校验和算法)。
- 发送端将数据和计算出的校验和放置在TCP首部中的校验和字段。
接收端:
- 接收端接收到数据后,对数据和校验和进行校验。
- 接收端使用与发送端相同的算法重新计算数据的校验和,得到校验和a2。
- 接收端将计算得到的校验和a2与接收到的校验和进行比较。
校验和不匹配的情况:
- 如果接收端计算得到的校验和a2与接收到的校验和不匹配,则表明数据在传输过程中发生了错误。
- 接收端会向发送端发送一个请求重传(ACK)的消息,以便发送端重新发送数据。
总的来说,TCP使用校验和来验证数据在传输过程中的完整性,确保数据的准确性和可靠性。如果校验和不匹配,则会触发重传机制,以保证数据的正确传输。
常见的校验和算法就是 md5 和 crc