位运算符和位运算

所谓位运算是指进行二进制位的运算。C语言提供了如下的位运算符:

运算符

含 义

举 例

&

按位与

a&b,a和b中各位按位进行“与”运算

|

按位或

a|b,a和b中各位按位进行“或”运算

^

按位异或

a^b,a和b中各位按位进行“异或”运算

~

取反

~a,a中各位按位进行“取反”运算

<<

左移

a<<n,a中各位全部左移n位

>>

右移

a>>n,a中各位全部右移n位

1.1.1 按位与运算符

基本格式:a&b

基本规则:0&0 = 0 0&1 = 0 1&0 = 0 1&1 = 1 (即,只有1&1为1,其他为0)

作用:

将某些位清零:想要清除哪一位,就与上对应的那一位为0.

eg: 00101011想要清除低3位,则&上11111000. 变成00101000

取指定位:想要取哪一位,就与上对应那一位为1.

eg:00101011想要取出低3为,则&上00000111. 变成00000011

1.1.2 按位或运算符

基本格式:a|b

基本规则:0|0 = 0 0|1 = 1 1|0 = 1 1|1 = 1 (即,只有0|0为0,其他为1)

作用:

设定某些位为1:想要设置哪一位为1,就或上对应的那一位为1.

eg:00101011想要将第4位设置为1,则|上00010000,变成00111011

1.1.3 异或运算符

基本格式:a^b

基本规则:0^0 = 0 0^1 = 1 1^0 = 1 1^1 = 0 (即“相同为0,相异为1”)

作用:

使特定位翻转:想要将哪些位翻转,就异或上对应的哪些位为1.

eg:00101011想要将低4位翻转,则^上00001111,变成00100100

和0相异或,保留原值

eg:00101011^00000000,还是00101011

1.1.4 取反运算符

基本格式:~a

基本规则:~0 = 1 ~1 = 0

作用:

结合&可以将一个数的指定位清0.

eg:a=00101011,如果a&=~1,则将a的最低位清0

一个数a按位取反之后的值为a的相反数-1

1.1.5 左移运算符

基本格式:a << n (n为整数)

基本规则:将一个数的各二进制位全部左移若干位。(左丢弃,右补0)

举例:x=01010001,x << 2,则x=01000100

作用:

在左移时被溢出舍弃的高位中不包含1的情况时,左移一位相当于该数乘以2。依此类推

1.1.6 右移运算符

基本格式:a >> n (n为整数)

基本规则:将一个数的各二进制位全部右移若干位。(正数左补0,负数左补1,右丢弃)

举例: x=00101111,x >> 2,则x=00001011

x=10110010,x >> 2,则x=11101100

作用:

在右移时被溢出舍弃的低位中不包含1的情况时,右移一位相当于该数除以2。依次类推

原文地址:https://www.cnblogs.com/qintangtao/p/2758046.html