存储器系统的大小端整理,以及大小端的判定方法

    存储器有两种映射机制,大端存储(big-endian)和小端存储(little-endian)。

以32bit machine,int型数据为例:

1.小端存储(little-endian)

        数据的最低位字节被看做是最低位字节,最高位字节被看做是最高位字节。

2. 大端存储(big-endian)

         数据的最高位字节保存在最低地址字节,最低位字节保存在最高地址字节。

记忆:简单讲,正常存储的为大端模式,反向存储的为小端模式;

Q1: 如何使用程序判定机器的大小端?

1)利用联合体来判断:

//使用联合体来判断,利用联合体可以在相同的存储空间储存不同的数据类型(不是同时存储)的性质,进行大小端的判断;

typedef union
{
	int i;
	char c;
	
}my_union;

int main(void)
{
	my_union u;
	u.i=1;
	printf("the result is %d",u.c);   //注意:char 类型占位符为%c,  字符串占位符为%s;
	return 0;                         //result is 1,说明存储方式为小端模式
}

/*
//相关知识点总结
联合体声明:
union hold            //注意:联合体一个时间点只能储存一个值;
{
    int digit;
    double bigfl;
    char letter;

};

联合体相关定义:
union hold fit;   //定义一个hold 类型的联合变量;
union hold save[10];  //定义一个内含10个该类型联合变量的数组;
union hold *pu;   //定义一个指向hold类型联合变量的指针;

联合体赋值:
fit.digit=23; 把23储存在fit,占4个字节;
fit.bigfl=2.0; 清除23,把2.0储存在bigfl,占8个字节;
fit.letter='h'; 清除2.0,存储'h',占一个字节;

*/

2. 可以使用强制转换符来判断机器的大小端;

// 将Int类型强制转换为char类型,
#include <stdio.h>

int main(void)
{
	int a=1;
	if((char)a&a == 1)
		printf("little-end");       //result is lettle-end
	else
	    printf("big-end");
	return 0;
}

/*
强制转换类型:
mice = (int)1.6 + (int)1.7;

*/

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值