您的位置:首页 > 理论基础

判断数字1在计算机中的存储方式

2015-11-22 21:10 232 查看
题目:
编写一个小程序,检验数字1在计算机中的存储方式是大端字节序、还是小端字节序。

题目分析:
数字1在计算机中可能有两种的存储方式,大端存储和小端存储。下面先介绍大端字节序和小端字节序。
1:原码为:00 00 00 01
第一种存储方式:00 00 00 01(——>由低到高 大端有序列)
第二种存储方式:01 00 00 00(——>由低到高 小端有序列)

具体实现思想:
(1)将存储数字1的空间地址进行强制类型转换为char *,并且赋值给字符指针*p,则对int类型的第一个字节进行判断,如果*p = 1,则为小端字节序的存储方式,否则,为大端字节序的存储方式。

下面为具体的程序:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int fun(void)       //判断数字1存储方式为小端还是大端
{
int num = 1;
char *p = (char *)#   //将数字1的地址进行强制类型转换
if(1 == *p)   //先出现1的位小端字节序
{
return 1;
}
else
{
return 0;
}
}

int main()
{
int ret = fun();
if(1 == ret)
{
printf("little!");  //小端字节序
}
else
{
printf("big!");   //大端字节序
}
system("pause");
return 0;
}


(2)利用共用体的特点解决,定义一个共用体union,
union UN
{
int i;
char c;
}
变量i和c的地址是相同的,并且存储的空间大小为取决于里面定义类型大小中最大的,则存储的空间大小占4个字节。但是利用共用体必须在同一时间只能访问一个变量。

下面是具体的程序:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
union UN    //定义一个共用体
{
int i;
char c;
};

int fun(void)
{
union UN un = {0};   //声明un,对其初始化
un.i = 1;
if (1 == un.c)
{
return 1;
}
else
{
return 0;
}
}

int main()
{
int ret = fun();
if (1 == ret)
{
printf("little!");
}
else
{
printf("big!");
}
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息