关于计算机中小端法和大端法存储的一点总结

来源:互联网 发布:java数组为空和为null 编辑:程序博客网 时间:2024/05/29 12:48

把一个int类型的整数储存在计算机里,比如一个int类型的数,用16进制表示后,可以表示为0x01234567,刚好4个字节,在C语言中就把它取一个变量名为a,则假设&a=0x100处,那么它的地址范围是0x100~0x103,这里就出现了两种储存方法,有“大端法”和“小端法“,大端法是

大端法:         0x100              0x101           0x102           0x103

…….

01

23

45

67

……

 

小端法:            0x100               0x101            0x102          0x103

67

45

23

01

 

下面我用一个简单的C语言程序来演示一下,他妈的int类型的数是怎么存在我的计算机中的,

#include<stdio.h>

typedef unsignedchar * byte_pointer;

voidshow_bytes(byte_pointer start, int len)

{

      int i;

      for(i = 0; i < len; i++)

      {

           printf("%.2x  ", start[i]);

      }

      printf("\n");

}

voidshow_int(int x)

{

      show_bytes((byte_pointer) &x,sizeof(int));

}

voidshow_float(float x)

{

      show_bytes((byte_pointer) &x,sizeof(float));

}

 

int main()

{

      int a = 223;

      float b = 20.59375f;

      show_int(a);

      show_float(b);

      return 0;

}

这段代码在VC6.0的运行结果


然而在我计算机组成原理当中学过的float类型的小数在计算机中存储的形式是:

0 100   0001  1010   0100   1100  0000   0000   0000(B)=41 a4 c0 00(H)

从这里你看出你的计算机是通过大端法存储的还是小端法存储的啦。  很显然是小端法存储的。

 

以上是在linux中的gcc里面运行结果

其实在mac的机子的XCode上运行也是这个结果

通过上面那个程序你还能发现什么,还是计算机中数是怎么存储的,比如说一个int类型的数,int类型的数的最大值是2147483647,用十六进制表示的形式为:7f ff ff ff(h)

那么对于小端法存储的计算机则可以这么表示ff ff ff 7f,那么闭2147483647这个数大一的数是什么呢,是  -2147483648, 注意前面的负号,它在这种小端法存储的计算机中是这么存储的:80 00 00 00 ,而不是把这个-2147483648数先转化成十六进制,然后进行转化的。,只不过在前面2147483647的基础上加一而已(16进中的加一);

 

0 0
原创粉丝点击