【随想录】大端序与小端序
尝试在图灵完备游戏里实现MIPS架构,但是参考书里的指令是大端序的,而TC里的8+位数是小端序的。(于是不做了,摆了)
话说其实挺奇怪,我们日常使用数字都是大端序。低位在后面,高位在前面,所以第0位反而是正着读的最后一位。
| 十亿位 | 亿位 | 千万位 | 百万位 | 十万位 | 万位 | 千位 | 百位 | 十位 | 个位 |
|---|---|---|---|---|---|---|---|---|---|
| 2 | 1 | 4 | 7 | 4 | 8 | 3 | 6 | 4 | 7 |
不过想来这也说得通,因为在我们的世界里,测量值更多是对数正态分布的,在常用数制下:
位数信息强于高位信息
高位信息强于低位信息
所以把高位信息放到了前面。
而计算机中的内存可以看成一条很长的纸带,抓住纸带一头开始向后数,因此计算机里第0位更多时候被认为是前面的。
所以 x86, arm 默认小端序,以便测试,你可以尝试一份 C++ 代码:
不出意料的话,它应该会输出 1 0 0 0
也就是低位在前,高位在后,是小端序。
不过网络中常常会使用大端序,所以自己写底层代码解包网络协议时一定要注意。
最近在玩 Turing Complete,之后可能会在博客里会放一些我的过关解法。