位运算简单总结及实用技巧

基本概念

对于整数类型变量中的某一位,或若干位进行操作

共六种:

&

按位与

|

按位或

^

按位异或

~

按位取反

<<

左移

>>

右移

 

 

& 按位与

11,有00

例:21&18 = 16

即: 00010101&00010010 = 0001000

 

作用

1.把变量的某些位清零

位运算简单总结及实用技巧_第1张图片

ps:2^8 = 2^4*2^4

 

2.获取变量中的某一位

位运算简单总结及实用技巧_第2张图片

 

 

| 按位或

00,有11

例:21|18 = 23

作用:

1.将变量中某些位置为1且保证其他位不变

位运算简单总结及实用技巧_第3张图片

Ps:A|0 = A

 

^ 按位异或

不同则1,相同则0

位运算简单总结及实用技巧_第4张图片

 

作用:

1.将变量中的某些位取反

位运算简单总结及实用技巧_第5张图片

2.简单数据加密(穷举法可证

如果a^b=c,那么c^b=a 以及 c^a=b (类似乘法和除法)

将b做秘钥,a为原文,c为密文

3.交换两个变量(穷举法可证

int a = 5, b =7;

a = a^b;

b = b^a;

a = a^b;

4.开关问题经常使用

^=1(或用!

位运算简单总结及实用技巧_第6张图片

 

 

~ 按位非

0110

 

<< 左移运算符

a<

a各二进制位全部左移b位后得到的值,左移越界丢弃,低位补0a的值不因运算而改变

位运算简单总结及实用技巧_第7张图片

作用

实际上,左移一位等于乘以2

可以用来开2的n次方

 

>> 右移运算符

a>>b

将a各二进制位全部右移b位后得到的值。溢出最右边的值就被丢弃

大多数编译器规定:右移时原符号位为1,右移则补1,原符号位为0,右移就补0

作用

右移n位相当于除2^n次方,但有可能除不尽,即小里取整

位运算简单总结及实用技巧_第8张图片

 

你可能感兴趣的:(位运算简单总结及实用技巧)