首先union存最大长度的成员变量,2字节,第一个字节和第二个字节按照地址增加顺序,分别对应t[0],t[1]
当赋值给t[1]时,后面一个字节赋值为10000100
,(因为0x21=00100001,小端需要将这个倒过来,变成低位对应低地址)
那么s是16个bit中的第11-15,也就是后8个bit中的第3-7位数字,此时对应的值位00010
,按照小端法它就是8
这个涉及到大端小端系统的知识点
可以看下这文章
https://blog.csdn.net/favory/article/details/4441361
t[1]=0x21 t[0]=0x00
+---------------------------+ +---------------------------+
| | | |
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
^ ^ ^ ^ ^ ^
| | | | | |
+---------------+ +-------------------+ +-----------+
timber.s=8 timber.m=16 timber.h=0