面试题目

来源:互联网 发布:金山数据恢复大师 编辑:程序博客网 时间:2024/06/06 03:27

中国电子科技集团公司第三研究所--嵌入式

C编程实现判断电脑大小端?

大端模式,是指数据的高位保存在内存的低地址中,而数据的低位,保存在内存的高地址中;小端模式相反。

(和十进制的类似,左边的高位,右边的是地位)

对于16Bit的整数:0x1234存放到CPU中,采用大小端存储如图所示:


对于32Bit的整数:0x12345678存放到一个整型变量int中。采用大端和小端存储如图所示:


采用大端方式 进行数据存放符合人类的正常思维,而采用小端方式进行数据存放利于计算机处理。

在计算机系统中,我们是以字节为单位存储的,每个地址单元都对应一个字节,一个字节是8Bit。在C语言中,有一个字节的char类型,有两个字节的short int,也有4个字节的int类型。必然存在着多个字节的安排问题,因此就导致了大端存储和小端存储的模式。 

方法一

对于用C判断大小端问题,可以定义变量并且赋值0x1234,我们通过读取内存低位的值,如果是数据的高位,则是大端模式,否则是小端模式。

#include <stdio.h>int main(){    short int x;    char x1,x2;    x = 0x1122;    x1 = ((char *)&x)[0]; //低地址    x2 = ((char *)&x)[1]; //高地址    if(x1 == 11)        printf("大端模式\n");    else        printf("小端模式\n");    return 0;}

方法二

联合体union的存放顺序是所有成员都从低地址开始存放,而且所有成员共享存储空间

#include<stdio.h>union temp{    short int a;    char b;}temp;int main(){    temp.a = 0x1234;    if(temp.b == 0x12) //低字节存的是高字节数据       printf("大端模式");    else        printf("小端模式");    return 0;}
方法三

和方法一一样,short int 占2个字节,char占一个字节,把short int 变量赋值给 char 变量,如果char 变量得到的是高位则是小端,如果得到是低位,则是大端。方法一通过指针,方法三直接是赋值。

#include<stdio.h>int main(){    short int i = 0x1234;    char c = i;    if(c == 12)        printf("大端模式");    else        printf("小端模式");    return 0;}











原创粉丝点击