位运算符的计算
按位取反“~”
将怨偶的数据转化为二进制,按照最小单位byte补足为8位后,输出其补码所对应的数据。
~5==~000000101==11111010==-6
(补码加1==反码 即为源数据*(-1))
按位与“&”
a&b
//将a和b的值转化为二进制,按照最小单位byte补足为8位后,上下对应,保留重合的“1”位
将保留后的值重新换算为十进制。
举例
int a=3,b=5;
printf("%d",a&b);
a=00000011(2)
b=00000101(2)
=>00000001(2)==a&b
仅仅保留了重合的位(取交集)
最后输出的值是1
按位或“|”,按位异或“^”
a|b
将a和b的值转化为二进制,按照最小单位byte补足为8位后,上下对应保留所有的“1”(取并集)
例如
int a=15,b=32;
pritnf("%d",a|b);
a==15==00001111(2)
b==32==00100000(2)
=>00101111(2)==a&b
最终输出结果是47
按位异或^
便是取二者二进制码的补集
例如
int a=15,b=3;
pritnf("%d",a^b);
a==15==00001111(2)
b== 3==00000011(2)
=>00001100(2)==a&b
最后输出12
左右移位“>>” “<<”
x<<n
左移位相当于x的二进制非0值整体向左移n位,相当于x*2^n
x>>n
右移位不同于左移位,向右移出位的数自动丢弃,相当于x/2^n