假设对存储器上一个字节进行编址, 地址线是从0~7由小到大,
磁盘,内存和寄存器皆为存储器, 当然都是0~7,
数据从磁盘读入内存,假设按位读,数据是[0]到[0], [1]到[1],...
应该不存在反人类的设计[7]到[0],[6]到[1],...
其实讲到这里,已经很明白,为什么一个字节没有大小端的问题了.
我们再深度思考一下,
位操作右移是低位出, 左移是高位出.
这可以看出大家(其实是汇编器)习惯上是左为高位,右为低位.
事实上这当然是编译器为了符合程序员们的习惯;
而真正去操作移位的CPU只知道从这头往另一头移,
即是地址[0]这端移出,还是地址[7]端移出.
CPU或寄存器才不管你是左是右呢,
这可能你不能理解, 我举个例子,
你拿支笔横放在你眼前(正面直视), 笔帽一端朝右;
当把笔帽拔出时,认为是向右移出一位;
就是说笔帽拔出就是低位出, 记住这一点;
再把笔帽一端朝你的左边,
把笔帽拔出, 笔认为还是笔帽拔出(自己的低位出)
而你看到的是左端移出;
再如当你看你家沙发时,小桌在左侧.
而你坐到沙发上时, 小桌则在你右侧;
所以最终左右与高低位是如何定的呢?
最后总结一下, 那就是编程最重要的基础点:
编址, 也叫索引: 假设寄存器位: 左高 7 6 5 4 3 2 1 0 右低
大家统一的习惯: [7]高位在左侧, [0]低位在右侧
但你得知道实际上编址是这样的: 0 1 2 3 4 5 6 7, 8 9 10 ...
告诉你是 左高 7 6 5 4 3 2 1 0 右低, 只是因为我们的数字,
高位在左, 低位满向左进位, 如 7519+1=7520
而小端模式,是将低位存到低字节,高位存到高字节.
如果我们这样看存储器编址,则顺了:
... 10 9 8 7 6 5 4 3 2 1 0 :<=址编看样这们我<==
高 7 5 2 0 低
最终觉醒,是数字与显示方向不统一搞出的字节序.
如果是,个十百千万...
则不会有大小端的事情了.
如有不同见解, 欢迎大家评论.