字节序列

date: 2016-08-18 9:25:00
title: 字节序列
categories: 《深入理解计算机系统》读后感

版权声明:本站采用开放的[知识共享署名-非商业性使用-相同方式共享 许可协议]进行许可

所有文章出现的代码,将会出现在我的github中,名字可以根据类全名来找,我在github中的文件夹也会加目录备注。


对于跨越多个字节的程序对象有两个重要的规则:

  • 该程序对象在虚拟内存中的地址

  • 存储器如何排列这些字节

排列字节的方法

大端法

部分机器对于字节的排序,把最高有效位–>最低有效位 从左到右排序,比如一位刚好是8的倍数的字节数,将被分成一个字节组:

{10110101}

[x7,x6,x5,x4,x3,x2,1.x0]

x7为最高有效位,x0为最低有效位,这种字节排序的方法称为大端法

小端法

字节序列与大端法相反,即{x0,x1,x2,x3,x4,x5,x6,x7}

{10101101}

x0为最低有效位,x7为最高有效位,这种方法叫做小端法

关于我们应该使用哪种字节排序,只要我们由始至终只坚持一种排序方法即可。没有技术的原因来甄别两种排序方法,无论使用哪一种,对于性能来说都没有优劣之分,就像《格列佛游记》中对于从哪一端打开一个鸡蛋一样:

在一般情况下,字节的序列对于程序员来说显得不那么重要,因为我们平常在编程时,不论使用哪一种字节序列,编译后运行的结果都是一样的,但是当下面几种情况时,字节序列却显得非常重要:

  • 在网络传输时

    • 当我们使用的机器对于字节排序使用的是小端法,可是通过网络传输时,使用大端法排序的机器得到字节序列,这时就需要遵守相应的网络传输标准,让字节序列在进行网络传输之前,先按标准转换成标准序列,然后要获取的机器首先得到标准的序列,再将标准序列转换成自己机器的排序方法。
  • 对机器级程序中整数数据进行阅读时

    • 我们通常书写字节序列时,使用的是大端法,即最高有效位–>最低有效位是按从左到右的顺序,但是当我们阅读使用反编译工具对于程序进行反编译时,阅读使用小端法排序字节产生的代码时,看到的字节序列是与我们书写习惯相反的。
  • 强制类型转换

    • 在编程时对某一个类型的数据进行强制类型转换,那么被转换的变量将不会按照其被定义的类型规则进行排序,会按照被转换之后类的类型进行排序,此时使用大端法和小端法得到的结果将完全不同,具体例子可以通过下面的练习题。

练习题:

参考答案:


你可能感兴趣的:(《深入理解计算机系统》读后感)