不常看到的表达式
a |= b —–> a = a | b
a &= b —–> a = a & b
a ^= b —–> a = a ^ b与运算 用“&”表示,规律如下:两个操作数中位都为1,结果才为1,否则结果为0
public class yuLearning
{
public static void main(String[] args)
{
int a=129;
int b=128;
System.out.println("a 和b 与的结果是:"+(a&b));
}
}
运行结果
a 和b 与的结果是:128
“a”的值是129,转换成二进制就是10000001,而“b”的值是128,转换成二进制就是10000000。根据与运算符的运算规律,只有两个位都是1,结果才是1,可以知道结果就是10000000,即128
- 非运算 用符号“~”表示 如果位为0,结果是1,如果位为1,结果是0
- 或运算 用符号“|”表示 两个位只要有一个为1,那么结果就是1,否则就为0
- 异或运算 用符号“^”表示 两个操作数的位中,相同则结果为0,不同则结果为1
此处我们应该注意 与非或运算之后输出的还是十进制的数;
同时或运算和与运算也可以用在if语句中
或运算“|” 的两边表达式都会被进行计算
与运算“&”的两边表达式都会被进行计算
这两点需要与 && 和 || 进行区别和注意
常量表示为十六进制
当一个常量表示为十六进制之后,一般会用在与或操作中,通过对与非操作的结果,我们可以查看这个结果是由哪些情况组合的
例如
private static final int FLAG_CLIP_CHILDREN = 0x1; //对应的十进制为1
private static final int FLAG_CLIP_TO_PADDING = 0x2; //对应的十进制为2
private static final int FLAG_ANIMATION_DONE = 0x10; //对应的十进制为16
private static final int FLAG_ANIMATION_CACHE = 0x40; //对应的十进制为64
private static final int FLAG_ALWAYS_DRAWN_WITH_CACHE = 0x4000; //对应的十进制为16384
protected int mGroupFlags;
如果做了如下操作
mGroupFlags |= FLAG_CLIP_CHILDREN;
mGroupFlags |= FLAG_CLIP_TO_PADDING;
mGroupFlags |= FLAG_ANIMATION_DONE;
mGroupFlags |= FLAG_ANIMATION_CACHE;
mGroupFlags |= FLAG_ALWAYS_DRAWN_WITH_CACHE;
则输出为
16467
因此我们可以认为现在flag是由FLAG_CLIP_CHILDREN,FLAG_CLIP_TO_PADDING,FLAG_ANIMATION_DONE,FLAG_ANIMATION_CACHE,FLAG_ALWAYS_DRAWN_WITH_CACHE几种状态组成的