写在前面:本篇blog分享三个知识点:
整形在内存的存储(介绍原码,反码以及补码)
机器的大小端(机器中的字节序排布顺序)
浮点数在内存中的存储(类似于科学计数法)
整形在内存的存储
前情回顾:
在之前的学习中,我们已经知道在整形家族中有char,short,int以及long及其unsigned的类型
其中(除char类型)不加unsigned默认的是signed 类型:比如我们写int其实就是signed int;
signed表示的是有符号类型,unsigned表示的是无符号类型
(ps:char类型在标准中没有规定默认是signed,但大多数编译器默认的可能还是signed。
个人猜想:char类型除外的原因可能是ASCII码中的全是正数?)
原码,反码以及补码
我们都知道,数据在计算机中是以二进制的形式经行存储,int类型目前占有32位。
我们可以假设有一个数字(10)储存在内存中,他的的二进制是1010,他要储存在in类型中的二进制应该是00000000 00000000 00000000 00001010;
我来打开编译器,开始查看在内存中看10是否以上述形式来储存的;代码如下:
int main()
{
int num = 10;
return 0;
}
在内存中我们得到如下结果:
![](https://img-blog.csdnimg.cn/img_convert/3ad8b81e72693ebfb89e951806097e2b.png)
10在内存中的存储居然是 0a 00 00 00;其实这是16进制表示(以方便阅读,要是32个数字那岂不是要看太晃眼了),把他翻译成2进制就是 00001010 00000000 00000000 00000000(这个字节排布顺序是反的,我会在大小端部分进行详细的介绍),确实符合我们假设模式。
知道了正数在内存中存储的方式,我们再来看看复数,以-10为例: