如何判断计算机大小端字节序存储

当我们创建一个整形变量时,我们会向内存申请一块空间。那么这个数据在内存中是怎么存储的呢?

int mian()
{
    int a=2;
    return 0;
}

以上代码,我们创建了一个整形变量a,a里面存储了数据2。计算机是以二进制的形式存储数据的,2的二进制是10。在32位平台下,一个整形4个字节,32位二进制。2的16进制形式为:0x00000002,这个时候内存里面是怎么存储呢。这里有两种方式,大端存储,小端存储。那么什么是,大小端存储呢。

小端字节序存储数据低位放在低地址,高位放高地址
大端字节序存储 数据低位放在高地址,高位放低地址

 

 那么,我们如何编写一段代码,判断计算机采用的是哪一种模式呢。

我们可以先写主函数部分。

int main()
{
	int ret = check_sys();
	if (ret == 1)
		printf("小端模式\n");
	else
		printf("大端模式\n");
	return 0;
}

接下来的check_sys()函数有两种实现方式。

1,指针实现。我们知道int类型占4个字节,我们将它转为char*类型,解引用操作时,只访问一个字节。从而,得到的返回值为1,说明01放在低地址,为小端模式。反之,如果是0,则说明01在高地址,为大端模式。

int check_sys()
{
	int i = 1;
	return *(char*)&i;

}

2.联合体方式。创建一个含有整形和字符类型的联合体。联合体会申请4个字节内存,字符类型只会使用它一个字节的空间,这时,我们给int 类型成员赋值为1。b中会存储第一个字节,我们将un.b返回,得到的返回值为1,说明01放在低地址,为小端模式。反之,如果是0,则说明01在高地址,为大端模式。

int check_sys()
{
	//定义联合体
	union MyUnion
	{
		int a;
		char b;
	};
	union MyUnion un;
	un.a = 1;
	return un.b;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值