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

来源:互联网 发布:钓炸天盗号软件app 编辑:程序博客网 时间:2024/05/21 02:48

题目:

       编写一个小程序,检验数字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 *)&num;   //将数字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;}


本文出自 “无心的执着” 博客,转载请与作者联系!

0 0