判断编译器是大端字节序还是小端字节序

小端字节序是指数据的低位存放在内存的低位,数据的高位存放在内存的高位。

大端字节序是指数据的低位存放在内存的高位,数据的高位存放在内存的地位。

以visual code 2022为例,它采用的是小端字节序,因此我们定义int i=1;查看内存会发现它是这么存放的

 

 我们知道int是四个字节,这里是以16进制数存放在内存里,因此01对应二进制就是00000001,那么当然00对应的就是00000000,我们发现原本16进制的int型数据i=1对应的应该是00000001,但在visual code 2022中,因为他采用的是小端字节序,那么数据的低位01,就去到了内存的低位,然后依次地从数据低位到高位存放在地址的低位到高位。

那么,除了查看内存外,我们可以通过代码来知道它是采用什么存放方式吗,答案是可以,这里提供一种较为简便的方式,当然还有很多其它的方式。

#include <stdio.h>
int main()
{
	int i = 1;
	int temp;
	temp = *(char*)&i;
	temp == 1 ? printf("小端") : printf("大端");
	return 0;
}

拿到i的32位地址后,强制转换位char* 类型,使得这个数据的地址的有效数从32位到8位,对其*解引用后也就是说拿到了该数据存放在内存中的低八位数据,那么如果采用小端字节序,低八位存放的就是01了,如果是大端字节序,低八位存放的当然就是00了

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值