朝花夕拾 · C语言 | 位运算篇

&  按位与        全1为1,有0则0
 |   按位或        有1则1,全0为0
^  按位异或      相同为0,相异为1
~按位取反        1取反为0,0取反为1
<<按位左移        按位左移,低位补0        num << n  <===>  num *2^n 

>>按位右移        按位右移动,有符号数高位补符号位:无符号数高位补0

                           num > > n  <===>  num /  2^n 

9&6

0000 0000 0000 0000 0000 0000 0000 1001

0000 0000 0000 0000 0000 0000 0000 0110

0000 0000 0000 0000 0000 0000 0000 0000
9 | 6
0000 0000 0000 0000 0000 0000 0000 1001
0000 0000 0000 0000 0000 0000 0000 0110
0000 0000 0000 0000 0000 0000 0000 1111
9^6
0000 0000 0000 0000 0000 0000 0000 1001

0000 0000 0000 0000 0000 0000 0000 0110

0000 0000 0000 0000 0000 0000 0000 1111

~9
~0000 0000 0000 0000 0000 0000 0000 1001

1111 1111 1111 1111 1111 1111 1111 0110
9 << 3

0000 0000 0000 0000 0000 0000 0000 1001 <<3

0000 0000 0000 0000 0000 0000 0100 1000
9>>3

0000 0000 0000 0000 0000 0000 0000 1001 >> 3

0000 0000 0000 0000 0000 0000 0000 0001

位运算的使用:

1.指定n位置1

0000 0000--》0000 1000
                       0000 0001 << 3
                       0000 1000
1010 0000  |  0000 1000
1010 1000                //低四位置1


num = num | 1 <<n;
1010 0001 | 0000 0001 << 6
0100 0000
1110  0001        //低六位置1

2.指定n位置0

1010 1010        
1111 0111     ==   &~(1 << 3)
1010 0010        //低四位置0


1111 0111 <==> ~0000 1000 <==> ~(1 << 3)


num =num &~(1<< n);


0011 1100 1010 1010 & ~(1 << 10) & ~(1 << 11)
1111 1011 1111 1111
0011 1000 1010 1010
1111 0111 1111 1111
0011 0000 1010 1010        //置11和12位为0

3.两数交换(不使用中间变量)

a=a^b;

b=a^b;

a=a^b;


a^a==0

a^0==a

b=(a ^ b ) ^ b = a ^ b ^ b = a ^ ( b ^ b ) = a ^ 0 = a;
a=a ^ b = a ^ b ^ a = 0 ^ b = b;

两数交换(中间变量):
int tmp = 0;

tmp = a;

a=b;
b = tmp;


求和方式:
a=a+b;

b=a- b;  ===>a + b - b = a

a=a- b;  ===>a + b - b =a + b - a

位运算符优先级:

~            大于          <<  >>          大于           &          大于          ^           大于   |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值