C语言进阶——数据的存储(大端、小端)

什么是大端模式和小端模式?


(1)大端模式:


数据的低位保存在内存的高地址中;数据的高位保存在内存的低地址中。(低在高处)


(2)小端模式:


数据的高位保存在内存的高地址中;数据的低位保存在内存的低地址中。(低在低处)

注意:讨论的是字节的顺序问题。


举例说明:假如有一个16bit的short 型 x,在内存中的地址为Ox0010, x的值为Ox1122,那么Ox11为高字节,Ox22为低字节。
那么对于大端模式:Ox11在低地址中(即Ox0010);Ox22在高地址中(即Ox0011)。
对于小端模式:则相反。


实战笔测:(本人笔测遇到)


这里补充指针类型的一些知识:
(1)指针类型决定了指针解引用操作符能访问几个字节:char*p;p访问一个字节,intq;*q访问了4个字节。
(2)指针类型决定了指针 +1 或 -1 操作的不同;p+1表示跳过1个字符;q+1表示跳过一个整型(4个字节)


编写一个函数,判断当前机器字节序,小端返回1,大端则返回0。

C语言进阶——数据的存储(大端、小端)_第1张图片

int check_sys()
{//这里使用 char* 是因为访问一个字节就行 
	int a=20;
	char *p=(char*)&a;//从 int* 到 char* 类型不兼容要强制类型转换 
	if(*p==0)
		return 0;//大端 
	else
		return 1;//小端 
}

测试代码:

#include
int check_sys()
{//这里使用 char* 是因为访问一个字节就行 
	int a=20;
	char *p=(char*)&a;//从 int* 到 char* 类型不兼容要强制类型转换 
	if(*p==0)
		return 0;//大端 
	else
		return 1;//小端 
}
int main()
{
	int ret=check_sys();
	if(1==ret)
		printf("小端!!!");
	else
		printf("大端!!!");
	
}

小端!!!

你可能感兴趣的:(C/C++面试知识点,C语言,c语言)