数据在内存中的存储
数据在内存中的存储
整数在内存中的存储
数据在内存中都是以二进制的序列存储的,整数的二进制表示方法有三种: 原码、反码、补码。对于有符号数的整数,三种表示方法均有符号位和数值位两部分,正0负1表示。
对于正数,正数的原码反码补码都相同
对于负数,原码:直接将数值按照正负数的形式翻译成二进制得到的就是原码
反码:符号位不变,数值位按位取反。
补码:在反码的基础上数值位加1得到的就是补码。
对于整形来说数据存放在内存中的都是补码。
大小端字节序
什么是大小端字节序?
对于计算机来说有着不同的存储顺序我们分为大端存储模式和小端存储模式
大端存储模式
低地址:放高位,高地址:放地位
小端存储模式
低地址:放低位,高地址:放高位
如何判断计算机是大端还是小端?
#include<stdio.h>
//这里以vs为例在vs中采用的是小端字节序
//给一个16进制位的数字0x11223344在小端字节序中存的方式为 44 33 22 11
//这里的char* p1=a;这里*p1=44 *p2=11 比较若p2>p1则大端反之小端
int sit(int* a) {
char* p1 = a;
char* p2 = a + 3;
if (*p2 > *p1) {
printf("大端字节序\n");
return 2;
}
else {
printf("小端字节序\n");
return 1;
}
}
int main() {
int a = 0x11223344;
int ret = 0;
ret = sit(&a);
printf("%d \n", ret);
return 0;
}
浮点数在内存中的存储
看这样一个代码输出什么?
输出的会是 9 9.0 9.0 9.0?
为什么不一样呢?我们来看浮点数在内存中的存储
浮点数在内存中的存储是按照IEEE 754规则存储的
那么,按照上⾯V的格式,可以得出S=0,M=1.01,E=2。⼗进制的-5.0,写成⼆进制是 -101.0,相当于 -1.01×2^2。那么,S=1,M=1.01,E=2。