1. 定义
这是个老生常谈的问题,定义大家都懂:
大端模式:数据低位存放在内存高位
小端模式:数据高位存放在内存高位
2. 数据高低位 VS 地址高低位
比如一个十进制数字:12345678
数据低位就是数据的右边,数据高位就是数据的左边;
地址低位就是地址的左边,地址高位就是地址的右边。
假如一页纸表示内存的话,大端模式刚好符合我们平时写字的习惯:地址低位存放数据高位。
3. 大小端的单位:Byte VS bit
很多文档都提到过,大小端是以字节为单位的,我之前也是这样认为的。
假如大小端以字节为单位,那么一个字节内部的bit是如何排列呢?是bit7, bit6, ... bit0?
非也!其实大小端本质上指的是一个 变量内部 数据高低位与地址高低位的的排列关系!
比如0x1234,大端模式排列为:0001 0010 0011 0100,小端模式排列就是bit完全反过来:0010 1100 0100 0001.
认识到这个很重要,特别是遇到按bit定义变量的时候。
比如信息传输的时候,一个字节按照bit划分为几部分:
Byte0
7~5: a
4~0: b
Byte1
c
大端模式就需要这么定义结构体:地址低位(先写的、左边的)存放变量高位(a):
struct S {
uint8 a : 3;
uint8 b : 5;
uint8 c;
}
小端模式就需要这么定义结构体:地址低位(先写的、左边的)存放变量低位(b):
struct S {
uint8 b : 5;
uint8 a : 3;
uint8 c;
}
标签:小端,低位,uint8,模式,地址,bit From: https://www.cnblogs.com/moon-sun-blog/p/17112400.html