【C语言督学训练营 第二十天】数据的机器级表示

文章介绍了计算机中减法通过加法器和补码实现,详细解释了补码的转换规则。讨论了不同系统中数据类型的字节数差异及其对溢出的影响,以及如何判断溢出。此外,文章还解析了IEEE754浮点数标准,并指出强制类型转换可能导致的精度丢失问题。最后,提供了相关练习题来巩固这些概念。
摘要由CSDN通过智能技术生成

前言

今天讲解的内容是408有关计算机组成原理的知识,不得不说龙哥是真的强,对于一些问题总是有自己的见解,如果不习惯龙哥的讲课方式的话可能会听的云里雾里,如果将龙哥讲的知识点听进去了,那么会很有收获,由于学习计组的时候是一年半之前,所以有关计组的知识忘得差不多了,反复听了几遍龙哥的讲解一遍比一遍有收获!

1.补码

计算机的CPU无法做减法操作(硬件上没有减法器),只能做加法操作.CPU中有一个逻辑单元叫加法器。计算机所做的减法,都是通过加法器将其变化为加法实现的。具体实现方法是正数+负数补码(符号位不变,数据部分取反+1)。
下图是2,-5,-3在内存中的视图,展示的方式是十六进制的形式,采用小端。
在这里插入图片描述

  1. 原码 转 补码

    正整数的补码是它本身,即 1的原码是0000 0001 ,补码 还是 0000 0001.
    负整数的补码是符号位不变,其余位按位取反 ,再加1 ,例如 -1 的原码 1000 0001 ,补码 1111 1111 .

  2. 补码 转 原码

    正整数的补码即是原码。例,1 的补码是0000 0001 ,原码还是 0000 0001
    负整数已知补码求原码,只需要再对补码求一次补码即可,即负整数的补码的补码即是原码。
    例 -1 的补码 1111 1111 ,再取一次补码(符号位不变,其余位按位取反,再加1)即是原码 1000 0001.

2.机器数表示及溢出判断

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

16位系统:long是4字节,int是2字节
32位系统:long是4字节,int是4字节 , long long是8字节
64位系统:long是8字节,int是4字节 , long long是8字节

long类型的数据在32位和64位的系统中所占用的字节数是不同的
如果在32位中使用了long类型的数据协议,那么就会导致在64位的系统中读取long类型的数据发生错误
这个时候就要兼容32位和64位
如果数据没有超过int的取值范围 就可以将long 改成int
如果超过int的取值范围 则可以将long 改成 long long或者double类型。

判断有没有溢出可以使用下面两个方法传送门两分钟学会
在这里插入图片描述
在这里插入图片描述

3.浮点数IEEE754标准解析

在这里插入图片描述
在这里插入图片描述
计算方法以4.5为例:
在这里插入图片描述
这里找的例子不是很经典,计算小数时如果得出的结果是1.2那么把1留下,然后用0.2继续乘,读的时候与求指数方向相反,指数是从下往上读,小数部分是从上往下读。

4.浮点数精度丢失

在这里插入图片描述
另外针对强制类型转换,int转 float可能造成精度丢失,因为 int是有10位有效数字的,但是int强制转为double不会,float 转为double也不会丢失精度。

5.真题实战

给出了几道练习题,通过这几道练习题可以很好的巩固今天所学的知识,下面还附带求解过程!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
计组是在大二上的时候学过,到现在已经忘得差不多了,如有不对的地方欢迎批评指出!


在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

酷尔。

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

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

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

打赏作者

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

抵扣说明:

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

余额充值