【C语言】大小端的判断

在文章的开头我首先要介绍一下大小端的概念:

大端模式:
是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
 
小端模式:
是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
 
 
若将00000001放入计算机中就有两种方法:
 
 
—————————————————————>                    小端

低地址            01       00        00        00           高地址

 

 

—————————————————————>                   大端

高地址            00       00        00        01          低地址

 

但是我们应该怎样判断当前计算机的存储模式呢??

首先用指针法:

<span style="font-size:18px;">#include<stdio.h>
int main()
{
	char c;
	int a=1;
	int *p=&a;
	c = *p;
	if(c==a)
	{
		printf("xiaoduan\n");
	}
	else
	{
		printf("daduan\n");
	}

return 0;	


}</span>


在介绍第二种解法前,我们首先简单介绍一下联合体的概念:

计算机科学中,联合体英语union)一种具有多个类型或格式的值,或者把它定义为一种由具有这样的值的变量形成的数据结构。一些编程语言可以支持被称为“联合体”的特殊的资料类型,来表示上述的变量。换句话说,一个联合体的定义(defenition)会指定一些允许的可以存储在实例内的原始数据类型(例如整型,浮点)。和记录(record)(或结构,structure)那些可以被定义去包含一个浮点数或整型不同的是,在一个联合体任何时候只有一个值。

 

联合体法:

<span style="font-size:18px;">#include<stdio.h>
union UN
{
	int a;
	char c;
}un;
int main()
{
	union UN un;
	un.a=1;
	if(un.c=1)
	{
		printf("xiaoduan\n");
	}
	else
	{
		printf("daduan\n");
	}

return 0;	

	
}</span>


两个的运行结果都是:

 

 

 

 

 

 

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值