硬核书<<程序原理>>

51 阅读2分钟

发现一本硬核书<<程序原理>>,有难度,有深度,推荐一下!

全面系统讲解程序原理,由浅入深,理论结合实践,图文并茂。

既能当一本百科全书,也能当一本架构书。

适合广大技术人。居家旅行,打怪升级,必备良药。

书在github: github.com/drink-cat/B…

===================================

节选内容:

字节顺序的含义
字节顺序,也叫字节序,指一个元素的多个字节的排列顺序。
大端,左边字节是大值。英文叫 Big Endian 。
小端,左边字节是小值。英文叫 Little Endian 。
换个说法,字节顺序是元素的序列化方式。把元素转成多个字节叫序列化,把多个字节转成元素叫反序列化。

字节顺序的使用场景:
编译程序、运行程序。指令读写内存,操作数字、指针等,需要指定字节顺序。由操作系统、编译器管理。
文件操作。把数字写到文件,需要指定字节顺序。如果写文件用小端,读文件用大端,则解析数字不符合预期。
网络操作。网络协议,比如 TCP、UDP 协议。网络协议传递数字(比如 int 型),需要指定字节顺序,发送方序列化,
接收方反序列化。如果发送方用小端,接收方用大端,则解析数字不符合预期。

为什么要区分大端、小端?
数字,可以占用多个字节。把数字转为字节,把字节转为数字,和顺序有关。
举个通俗的例子,有 5 个字符,组成数字。"12345" 与 "54321",含义不同。

大端的例子:
某个账户的余额为 67891 元。含义为 “6 万 7 千 8 百 9 十 1 个”,左边单位更大,所以是大端。
某个人的体重为 123kg 。含义为”1 百 2 十 3 个”,左边单位更大,所以是大端。

注意,内存本身没有大端、小端的含义。内存是一个很大的字节数组,每个字节相互独立。
形象的表示内存: byte[] mem = new byte[99999] ,这里的 99999 只为了表示空间很大。
CPU、编译器、程序,在使用数字和内存字节相互转换时,才有大端、小端的含义。