为了简单直白一点方便大家都能看清楚,就不考虑处理8位数据的情况了,就假设 type 是一个4位宽的变量,初始化为0吧
先或再位移:i=0, type=0000, sda=1 -> type|sda=0001, type<<1=0010
i=1, type=0010, sda=0 -> type|sda=0010, type<<1=0100
i=2, type=0100, sda=0 -> type|sda=0100, type<<1=1000
i=3, type=1000, sda=1 -> type|sda=1001, type<<1=0010
先位移再或:i=0, type=0000, sda=1 -> type<<1=0000, type|sda=0001
i=1, type=0001, sda=0 -> type<<1=0010, type|sda=0010
i=2, type=0010, sda=0 -> type<<1=0100, type|sda=0100
i=3, type=0100, sda=1 -> type<<1=1000, type|sda=1001
《因此,这两种代码顺序的结果是等价的,不会影响读取的数据》 |