按位与、或、非、异或总结

2018-07-31  本文已影响0人  vampire6

位运算符有:&(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。

优先级从高到低,依次为~、&、^、|
1. 按位与操作 0&0=0; 0&1=0; 1&0=0; 1&1=1

负数按补码形式参加按位与运算


2. 按位或运算符(|)

另,负数按补码形式参加按位或运算。


3. 异或运算符(^)

4. 取反运算符(~)
5. 左移运算符(<<)
6. 右移运算符(>>)
7. 复合赋值运算符
位运算符 例子 相当于
&= 例:a &= b 相当于a=a & b
|= 例:a |= b 相当于a=a | b
>>= 例:a >>= b 相当于a=a >> b
<<= 例:a <<= b 相当于a=a << b
^= 例:a ^= b 相当于a=a ^ b

不同长度的数据进行位运算

如果两个不同长度的数据进行位运算时,系统会将二者按右端对齐,然后进行位运算。

以“与”运算为例说明如下:我们知道在C语言中long型占4个字节,int型占2个字节,如果一个long型数据与一个int型数据进行“与”运算,右端对齐后,左边不足的位依下面三种情况补足,

(1)如果整型数据为正数,左边补16个0。
(2)如果整型数据为负数,左边补16个1。

(3)如果整形数据为无符号数,左边也补16个0。

如:long a=123;int b=1;计算a & b。

a&b
a 0000 0000 0111 1011
b 0000 0000 0000 0001
= 0000 0000 0000 0001

如:long a=123;int b=-1;计算a & b。

a&b
a 0000 0000 0111 1011
b 1111 1111 1111 1111
= 0000 0000 0111 1011

如:long a=123;unsigned int b=1;计算a & b。

a&b
a 0000 0000 0111 1011
b 0000 0000 0000 0001
= 0000 0000 0000 0001
8. 原码、反码、补码,负数表示法
上一篇 下一篇

猜你喜欢

热点阅读