• MeasureSpec使用0x3 « 30作为MODE_MASK mMeasuredHeight使用0x00ffffff作为MEASURED_SIZE_MASK

1)移位操作(0x代表后面是16进制数字,移位操作类似乘法,花费更短的时间)

0x3 >> 2 = 0
0x3 >> 1 = 1
0x3 << 1 = 6
0x3 << 2 = 12

0x3即 11,移位之后为 110,1100;

移位30即 11+30个0;

2)Integer

Integer的总共32位,4个字节;所以0x3移位30占据最高的2个字节.

3)Mask

measureSpec & MODE_MASK 为高2位 总共4个表示;

00 :UNSPECIFIED
01 :EXACTLY
10 :AT_MOST
11 :无

measureSpec & ~MODE_MASK 为低30位;

参考资料: View.MeasureSpec源码