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

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

2014-10-22 00:53 309 查看
把一个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进中的加一);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: