目录
一.整数在内存中的存储
首先,复习一下正整数和负整数的原码,反码,补码
数据存放内存中存放的是补码
二.大小端自序和字节序判断
1.什么是大小端
大端存储模式 : 数据的低位字节内容保存在内存的高地址,数据的高位字节内容保存在内存的低地址。
小端存储模式 : 数据的低位字节内容保存在内存的低地址,数据的高位字节内容保存在内存的高地址。
2.为什么会有大小端
简单来说,就是具体编译器的不同就会有不同的更合适的存储方式。而大端的优势是第一个字节是高位,很容易就可以判断出正负性;小端则是最后一个字节是高位,可以依次取出相应的字节进行运算,最后把符号位刷新,这样运算更高效。
3.如何确定大小端
3.1共用体确定大小端
a = ox 11 22 33 44,如果是小端,那么第一个字节就是0x44
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int IsSmallEnd1()
{
typedef union U u;
u.a = 0x11223344;
if (u.c == 0x44)
{
return 1;
}
else
return 0;
}
int main()
{
int i = IsSmallEnd1();
if (i == 1)
{
printf("小端模式\n");
}
else
{
printf("大端模式\n");
}
return 0;
}
3.2指针确定大小端
强制类型转换会发生截取,下面就是截取了第一个字节,然后解引用读取第一个字节的数据
int IsSmallEnd2()
{
int i = 0x11223344;
i = 0x11223344;
if (*(char*)(&i) == 0x44)
{
return 1;
}
else
return 0;
}
int main()
{
int i = IsSmallEnd2();
if (i == 1)
{
printf("小端模式\n");
}
else
{
printf("大端模式\n");
}
return 0;
}