C语言复习:大小端

这篇博客是对于我个人的知识的复习,当然如果有某位大佬能够指出这里面有哪些概念含糊不清或者难懂,麻烦指出来感激不尽。

关于大端小端的概念

  • 小端:数据的高位字节存放在高地址内,数据的低位字节存放在低地址内。
  • 大端:数据的高位字节存放在低地址内,数据的低位字节存放在高地址内

目前有两种方法判断机器的大小端

  1. int变量的地址强转为char*的指针,最后用指针取值得到的就是低地址的值
#include<stdio.h>
int main()
{
	test.a = 0x12345678;
	char* m = (char*)&i;
	if (*m = 0x78)
	printf("是小端");

}

  1. 利用联合体的特性,各成员共享同一段内存空间,一个联合体的长度为最长成员长度。
#include<stdio.h>

union mm
{
	int a;
	char c;
}test;

int main()
{
	test.a = 0x12345678;
	//char* m = (char*)&i;
	//if (*m = 0x78)
	//	printf("是小端");
	if (test.c = 0x78)
		printf("是小端");

}

上面的基本在大一时的老师就会讲了,我们的重点不是上面,而是为什么要有大小端之分?将所有的高位字节存放在高地址,低位字节放在低地址就行了?

因为在计算机中是以字节为基本单位的,除了1字节的char类型,4字节的int,8字节(某些系统)的long类型,而且对于大于8位的寄存器,例如32位或者64位,就产生了如何将多个字节按顺序进行安排?也就有了大端储存模式和小端储存模式。

常见的X86结构是小端模式,ARM,DSP也是小端模式,某些ARM可以自己选择硬件的大小端模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值