引言:
int a=20; int b=-10;
我们知道为a分配四个字节的空间。那如何存储?
下来先了解下面的概念
一、原码反码补码
计算机中的有符号数(是整型,与浮点数在内存中的存储无关)有三种表示方法,即原码反码补码。
三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位三种表示方法各不相同。
辨析:
有符号数分为正数和负数,正数和无符号数一样,原码反码补码相同,只有有符号数中的负数三者才不同。
原码:
直接将整型按照正负数的形式翻译成二进制即可
反码:
将原码的符号位不变,其他位依次按位取反就可以得到
补码:
反码+1就得到补码。
例子:
二、对于整型来说:数据存放内存中其实存放的是补码
为了验证,我们将-20的补码转化为十六进制位
如何将二进制位转化为十六进制:
4个二进制位表示一个十六进制位
以补码形式存储的原因:
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理(CPU只有加法器);此外补码和原码可以相互转换,其运算过程是相同的。
举个例子:
发现补码计算的结果是正确的!
三、大端小端存储方式
大端(存储)模式:(大端字节序存储模式)
指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
小端(存储)模式:(小端字节序存储模式)
指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。
内存的低地址和高地址:
一般内存块左边就是低地址,右边是高地址。
数据的高位和低位:
与平常理解的高位和低位意义相同,例如正数123,1就是百位就是高位,而3是个位,就是低位!
我们描述的是字节存放的顺序,而不是比特位存放的顺序!