目录
1.整形数据在内存中的存储:原码,反码,补码
对于整形来说,数据存放内存中其实存放的是补码
正数:原码(符号位为0),反码,补码相同
int a=5;
//二进制表示
//原码
//00000000 00000000 00000000 00000101
//反码
//00000000 00000000 00000000 00000101
//补码
//00000000 00000000 00000000 00000101
负数:
原码:符号位为1
反码:除符号位外,其余位按位取反
补码:反码加1
int a=-5;
//二进制表示
//原码
//10000000 00000000 00000000 00000101
//反码
//11111111 11111111 11111111 11111010
//补码
//11111111 11111111 11111111 11111011
2.浮点型数据在内存中的存储
浮点型数据的存储规则:(-1)^S * M * 2^E
(-1)^S表示符号位,M表示有效数字,2^E表示指数位;
float f=5.5;
//二进制表示
//101.1
//小数点前面表示2^0,2^1,2^2…………小数点后面表示2^-1,2^-2…………
//(-1)^0 * 1.011 * 2^2
//S=0 , M=1.011 , E=2
//E=2 +127 规定:float类型E+127存储,double类型E+1023存储
//M=1.011 规定:存储时舍去1,folat类型补满23位,double类型补满52位
//存储到内存
//S E M
//0 10000001 01100000000000000000000
3.大小端字节序的介绍
- 大端字节序存储
将高位字节处的数据放在低地址处,将低位字节处的数据放在高地址处
- 小端字节序存储
将低位字节处的数据放在高地址处,将高位字节处的数据放在低地址处
一个可以判断当前编译器是大端存储还是小端存储
(char类型的指针只访问一个字节)
int a=1;
原码:00000001
反码:00000001
补码:00000001
大端存储: 00 00 00 01
小端存储: 01 00 00 00
#include<stdio.h>
int check_sys()
{
int a = 1;
char* p = (char*)&a;
if (*p == 1)
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int ret = check_sys();
return 0;
}