位的顺序
MSB:
Most Significant Bit 最高有效位,一个二进制数的最左边的那一位,他拥有最高的权重,他的值是1还是0对整个数的影响最大。2的N-1次方。
LSB:
Least Significant Bit 最低有效位,一个二进制数的最右边的那一位,他用用最低的权重,他的值是1还是0对整个数的影响最小。2的0次方。
总结:
MSB和LSB讨论的是【位】的顺序,默认每个字节的内部位序都是从MSB->LSB排列,像我们正常写数字。
例子:
以一个8位二进制数为例,1001 0110,十进制为:128+16+4+2=150。
位位置 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
二进制 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
权重 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
MSB是bit7,该bit为1,则权重为2^7=128,如果该bit改为0,则数值从150-128变为22,数值变化巨大。
LSB为bit0,该bit为0,则不参与数字的计算,如果改为1,则数值仅仅是从150变化到151,数字变化微小。
字节的顺序
Motorola:
摩托罗拉格式,同大端,高字节在前。像我们写数字一样,从最高位开始写,1234,从左到右编写,千百十个,1为高位。
字节的最高有效字节存储在最低的内存地址,
Inter:
英特尔格式同小端,低字节在前。
字节的最低有效字节存储在最低的内存地址,
例子
车速信号speed_signal=0x3FE,高字节是0x03,低字节是0xFE
1.Inter格式:
byte\bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
0xFE在byte0,0x03在byte1 ->0xFE03
2.Motorola格式:
byte\bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
0x03在byte0,0xFE在byte1 ->0x3FE
内存的地址
把计算机想象成一条长长的街道,街道上有很多房子,内存是这条街道,内存地址是房子的门牌号,数据是住在房子里的人。
门牌号从街道起点开始编号,100,101,102...,100号就是最低内存地址,这条街上最小的门牌号,最高内存地址是这个条街上最大的门牌号。、
我们常说的从低地址到高地址,就是指从门牌号醉倒到大阅读,100->101->102->103
最低内存地址
起始位置,第一个位置
最高内存地址
结束位置,最后一个位置
总结
在C语言中,如果你用一个指针指向这个数据(0x1234 5678)的起始地址,则大端模式P[0]=0x12,小端模式P[0]=0x78
大端:大人物住小房子,小端:小人物住小房子