这是一篇介绍计算机大端模式和小端模式的博客,主要介绍了大小端方式的区别,各自的优缺点,以及如何利用代码进行简单判断。
一、来源与定义
1、来源
大端小端名词取自于《格列夫游记》中一个小故事,对鸡蛋从哪端开始吃产生分歧从而引发了战争的故事;后用于指代字节顺序。
2、定义
a、大端模式:最高位字节存放在内存的低地址端,最低位存放在内存的高地址端;
以十进制简单说明数据的最高位与最低位: 最右端的个位即是最低位,而最左端是最高位; 那举例来说,大端模式中,对于0x11223344,存放顺序为:
b、小端模式:最高位字节存放在内存的高地址端,最低位存放在内存的低地址端;
同样的例子:0x11223344,小端模式中,存放顺序为:
c、各自的特点:
- 小端模式 :强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样;
- 大端模式 :符号位的判定固定为第一个字节,容易判断正负。
二、划分大端小端模式的原因
在计算机系统中,我们以字节为单位,一个字节为8bit。当一个数据有多个字节时,就存在着如何安排多个字节顺序的问题,这也就是大端小端模式产生的原因。
三、如何区分大端小端
1、查看内存中存储数据的顺序
通过vs编译器的调试窗口,我们可以清晰的看到内存中对应的地址以及存储的数据; 如下,我们定义一个整型数据,
int main()
{
int a = 0x11223344;
return 0;
}
由此我们可以看到,在内存中,地址由低到高的同时,数据位也由低位到高位,故这是小端模式;反之,若地址由低到高,而数据位却由高到低,则是大端模式。
2、定义整型数据,利用强制类型转换,只访问第一个字节
采用如下代码:
#include<stdio.h>
int main()
{
int a = 1;
char* pa = (char*)&a;
printf("%d", *pa);
return 0;
}
定义整型变量a = 1,pa指向a的地址,由于强制类型转换为char*,所以pa的步长为1个字节,在printf时,只会输出整型a变量4个字节中,第一个字节的数据。 a的原码为 00000000 00000000 00000000 00000001 转换为16进制为 00 00 00 01 若为大端模式,则存储顺序地址由低到高应依次为 00 00 00 01,故应输出0; 若为小端模式,则存储顺序地址由低到高应依次为 01 00 00 00,故应输出1; 结果不同,从而得以判断。 依据测试,同样可以得出,本计算机为小端模式。
标签:小端,00,字节,模式,地址,大端 From: https://blog.51cto.com/u_15423682/6099891