一、计算数值
1.与运算&
1)0x*****&1 运算后不变 (1&1=1,1&0=0 ==>0->0,1->1)
2)0x*****&0 运算后置零 (1&0=0,0&0=0 ==>0->0,1->0)
a.可以用if ((a & 1) == 0)代替if (a % 2 == 0)来判断a是不是偶数
2.或运算 |
1)0x***** | 1 运算后置一 (0|1=1,1|1=1 ==>0->1,1->1)
2)0x***** | 0 运算后不变 (1|0=1,0|0=0 ==>0->0,1->1)
3.异或运算 ^
1)0x***** ^1 运算后取反 (1^1=0,0|1=1 ==>0->1,1->0)
2)0x***** ^0 运算后不变 (1^0=1,0|0=0 ==>0->0,1->1)
a.数字交换 a=1,b=2
a ^= b;
b ^= a;
a ^= b; -> a=2,b=1
b.部分反转 (与1异或)
反转X的低四位:X=1010 1110 , Y=0000 1111
X^Y=1010 0001
- 1、交换律
- 2、结合律 (a^b)^c = a^(b^c)
- 3、对于任何数x x^x=0 x^0=x
- 4、自反性 a^b^b = a^0 = a;
3.取反运算~
1)运算位取反
a.最低位置0: a & ~1
4.左移运算<<
左边丢弃,右边补0
5右移运算<<
右边丢弃,正数左补0,负数左补1
二、计算规则
1.两个不同长度的数据进行位运算时,系统会将二者按右端对齐,然后进行位运算
- 1)如果整型数据为正数或无符号,左边补0。
- 2)如果整型数据为负数, 左边补1。
2.复合赋值运算