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

前言

今天讲解的内容是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.真题实战

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


在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/apple_51931783/article/details/129269396