int 类型在内存中占4个字节,而一个字节是8个比特位,所以int类型占32个比特位。
float类型在内存中同样也占4个字节,所以其也是占32个比特位。
一个比特位就是一个0或1,所以其在二进制位数如下
在这个中每位可能是0,也可能是1,不同的0、1组合,就表示不同的int类型数或float类型数。
Int类型的存储方式
首先明白一点,int类型在内存中存储是以补码的形式。
明白第二点,正数的原码、反码、补码都相同,即写出原码,同时也是他的反码和补码。
而对于负数来说:
原码:整数以二进制写下的形式就是原码。
反码:除符号位(二进制的首位,首位是0表示正数,首位是1表示负数)外,其他位按位取反,就是反码。
补码:反码+1,就得到补码。
例1
如例1我们就写出来了正数9和负数-9的二进制码,但是在内存中是以16进制进行存储显示的。
一位16进制位数代表4位二进制数,所以就得到:
所以
9在内存中存进去的就是:
00 00 00 09;
-9在内存中存进去的就是:
ff ff ff f7;
注:编译器存储内容会采用两种存储节序(大端存储,小端存储),不同的编译器有不同的存储节序。对于大端存储,9的16进制存进去会变成是:00 00 00 09;对于小端存储,9的16进制存进去是:09 00 00 00。
Float类型的存储方式
float类型的存储方式和int类型不同,所以上面的原码、补码、反码也就不使用于float类型。
在C语言中,浮点型二进制的存储按照IEE 754标准,也就是任何一个浮点型数可以表示为:
(-1)^S*M*2^E 其中1<=M<2
但是IEE 754又有一项规定,
由于M的整数位始终为1,所以可以省去,记省去1后的M为M';
由于E是一个无符号整数,所以对于float类型E要加上127,记加上127后的E为E'。
float的存储顺序为:
例:
所以,
float i=5.5,在内存中存的就是:
40 b0 00 00;
float a=-1.5,在内存存的就是:
bf b0 00 00;