Android 中 FLAG 的操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Gdeer/article/details/88080660

总结一下:

添加 FLAG:mGroupFlags |= FLAG
清除 FLAG:mGroupFlags &= ~FLAG
包含 FLAG:(mGroupFlags & FLAG) != 0 或 (mGroupFlags & FLAG) == FLAG
不包含 FLAG:(mGroupFlags & FLAG) == 0 或 (mGroupFlags & FLAG) != FLAG

在 Android 源码中,有很多的 FLAG 常量,这些常量用二进制来表示时,只有一位是 1。
有一个变量通过 |、&、~ 等操作来保存当前对象拥有的 FLAG。
当该变量的二进制表示中,为1的位置中包括 FLAG 常量的二进制表示中为1的位置,则该对象拥有该 FLAG。

如一个类有一个变量 mGroupFlags;一个 FLAG = 0x8,即 1000。

  • 当要添加 FLAG 时,要设置 mGroupFlags |= FLAG,由于“1 | 任何数都是 1”,这会将 FLAG 嵌入 mGroupFlags 中。

  • 当要清除 FLAG 时,要设置 mGroupFlags &= ~FLAG,由于“0 & 任何数都是 0”,这会将 ~FLAG 嵌入 mGroupFlags 中。

  • 当 mGroupFlags 包含 FLAG 时,由于“1 & 任何数都是那个数本身,0 & 任何数都是 0”,所以 (mGroupFlags & FLAG) == FLAG,即 (mGroupFlags & FLAG) != 0

  • 当 mGroupFlags 不包含 FLAG 时,由于“1 & 任何数都是那个数本身,0 & 任何数都是 0”,所以 (mGroupFlags & FLAG) != FLAG,即 (mGroupFlags & FLAG) == 0

与或操作的规则:

1 & 任何数都是那个数本身
0 & 任何数都是 0
0 | 任何数都是那个数本身
1 | 任何数都是 1

猜你喜欢

转载自blog.csdn.net/Gdeer/article/details/88080660