MeasureSpec中的按位运算符、移位运算符讲解(左位移、与、求反)

我们先看下基础知识


MeasureSpec中的按位运算符、移位运算符讲解(左位移、与、求反)_第1张图片


MeasureSpec中的按位运算符、移位运算符讲解(左位移、与、求反)_第2张图片

好了,下面看MeasureSpec中的按位运算、移位运算:

android经常会有类似如图,(0的二进制数为00)00左移30位,达到的目的就是去形成一个32位的值

MeasureSpec中的按位运算符、移位运算符讲解(左位移、与、求反)_第3张图片
1

将图2可以用图3解释

MeasureSpec中的按位运算符、移位运算符讲解(左位移、与、求反)_第4张图片
2


MeasureSpec中的按位运算符、移位运算符讲解(左位移、与、求反)_第5张图片
3


MeasureSpec中的按位运算符、移位运算符讲解(左位移、与、求反)_第6张图片

~  这个符号是求反,0变1,1变0,~MODE_MASK=11111111,11111111,11111111,11111111

MeasureSpec中的按位运算符、移位运算符讲解(左位移、与、求反)_第7张图片

& 这个符号为与运算,两个二进制值完全一样才会得1,不同则为0


MeasureSpec中的按位运算符、移位运算符讲解(左位移、与、求反)_第8张图片

或运算如下图

MeasureSpec中的按位运算符、移位运算符讲解(左位移、与、求反)_第9张图片


打包的规则是:将左边size转换为32位,将右边mode转换为32位,然后进行或运算。前两位作为mode,后30位作为size

你可能感兴趣的:(MeasureSpec中的按位运算符、移位运算符讲解(左位移、与、求反))