关于计算机中小端法和大端法存储的一点总结
2014-10-22 00:53
309 查看
把一个int类型的整数储存在计算机里,比如一个int类型的数,用16进制表示后,可以表示为0x01234567,刚好4个字节,在C语言中就把它取一个变量名为a,则假设&a=0x100处,那么它的地址范围是0x100~0x103,这里就出现了两种储存方法,有“大端法”和“小端法“,大端法是
大端法: 0x100 0x101 0x102 0x103
小端法: 0x100 0x101 0x102 0x103
下面我用一个简单的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进中的加一);
大端法: 0x100 0x101 0x102 0x103
……. | 01 | 23 | 45 | 67 | …… |
… | 67 | 45 | 23 | 01 | … |
#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进中的加一);
相关文章推荐
- 关于计算机中的大小端存储问题
- 关于计算机黑客的一点总结
- java和struts使用中的一点总结--关于写在页面上的select域的选项选中后保存状态的办法!
- 关于用VC,VB进行图像数据(二进制大对象)存储数据库的一点心得
- 关于学习CCNA的一点经验总结
- 关于JAVA集合类的一点总结!
- 关于DNN Module开发学习以来的一点总结
- 关于如何jar的一点总结 (转自:javaresearch yedongshu2001 原创)
- 关于.net中修饰符的一点总结
- 计算机学习笔记2:关于微程序的一点己见
- 关于连接池写法的一点总结(一)
- 关于网站开发文件编码的一点总结[转]
- 关于计算机体系结构的一点思考。
- 关于PHP的i18n(国际化)的一点总结(1)----gettext部分
- 关于连接池写法的一点总结(二)
- 关于java.io的一点总结
- 关于WebForm的编辑列ItemTemplate和EditItemTemplate的一点小总结
- 关于用VC,VB进行图像数据(二进制大对象)存储数据库的一点心得
- 关于PHP的i18n(国际化)的一点总结(2)----各种方法
- 关于c与汇编混合编程的一点总结