数据的表示和运算

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位的校验和,识别出错的数据,是一个字符串,比原始数据要小,但是是通过原始数据产生的,这个校验和很难出现错误:原理是

  1. 发送端:

    • 发送端将数据分成适当大小的段,并为每个段计算校验和(通常使用16位的校验和算法)。
    • 发送端将数据和计算出的校验和放置在TCP首部中的校验和字段。
  2. 接收端:

    • 接收端接收到数据后,对数据和校验和进行校验。
    • 接收端使用与发送端相同的算法重新计算数据的校验和,得到校验和a2。
    • 接收端将计算得到的校验和a2与接收到的校验和进行比较。
  3. 校验和不匹配的情况:

    • 如果接收端计算得到的校验和a2与接收到的校验和不匹配,则表明数据在传输过程中发生了错误。
    • 接收端会向发送端发送一个请求重传(ACK)的消息,以便发送端重新发送数据。

总的来说,TCP使用校验和来验证数据在传输过程中的完整性,确保数据的准确性和可靠性。如果校验和不匹配,则会触发重传机制,以保证数据的正确传输。

常见的校验和算法就是 md5 和 crc

  • 33
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风止￴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值