北大C++ 1.3 位运算
来源:互联网 发布:电脑提示激活windows 编辑:程序博客网 时间:2024/06/06 10:57
位运算
C/C++ 提供了6种位运算。
&按位与(双目)|按位或(双目)^按位异或(双目)~按位非(单目)<<左移(双目)>>右移(双目)1.
通常用来将某变量中的某些位清0且同时保留其他位不变。\
也可以用来获取某变量中的某一位。
n &= 0xf0 means n = n&0xf0;
&=
2.
|=
3.
^=
将某变量中的某些位取反,且保留其他位不变。
eg. 将int型的低8位取反,而其余位不变
n ^= 0xff;
重要特点1: (a^b=c)---> (( c^b = a ) 且 (c^a = b)); 可以应用在最简单的\
加密和解密。
重要特点2:交换2个数。
int a = 5,b = 7;a ^= b;b ^= a;a ^= b;
4.
<<=
a << b
a的值不发生改变。
左移1位,等于乘以2,左移n位,等于乘以pow(2,n). 但是左移操作的速度比乘法运算 \
的操作快很多很多。
5.
>>=
- a >> b
- a的值不发生改变。
- 对于有符号数,如long, int, short, char类型变量,在右移时,符号位(即最高位)将一起移动,\
- 并且大多数C/C++编译器规定,如果原符号位位1,则右移时高位就补充1,原符号位为0,\
- 则右移时高位就补充0.
实际上,右移n位,就相当于左操作数除以pow(2,n),并且将结果往小里取整。
eg. 这是一个规律,不是规定。
-25>>4 = -2
-2>>4 = -1
18>>4 = 1
#include <stdio.h>int main(){ int n1 = 15; short n2 = -15; unsigned short n3 = 0xffe0; char c = 15; n1 = n1>>2; n2 >>= 3; n3 >>= 4; c >>=3; printf("n1=%d,n2=%d,n3=%d,c=%x\n",n1,n2,n3,c); return 0; //输出结果:n1=3,n2=-2,n3=4094,c=1}
思考题:
有两个int型的变量a和n(0<=n<=31),要求写出一个表达式,这个表达式的值和a的第n位相同。
(a>>n) & 1
当然这里的第0位,第1位是哪一位自己要想想清楚。
当0<=n<31时,还可以:(a&(1<<n)) >> n
位运算的速度优势那是超级棒的了!!!
0 0
- 北大C++ 1.3 位运算
- C-枚举,位运算
- C语言位运算
- C语言位运算
- 【C++】位运算符
- C语言位运算
- c语言位运算
- 【C++】位运算符
- C语言位运算
- C位运算
- c语言位运算
- C /C++ 位运算
- C位运算总结
- C:位运算
- C语言位运算
- C 位运算 2
- C位运算
- C位运算
- 图(邻接表)的遍历——DFS(深度优先搜索)和BFS(广度优先搜索)和连通图
- 12. Integer to Roman
- React Native学习步骤
- Uncaught TypeError: $.cookie is not a function 解决办法
- bootstrap-获取行内数据
- 北大C++ 1.3 位运算
- oc中嵌入swift代码
- iOS宏定义的使用与规范
- [Unity3D课堂作业] Priests and Devils 牧师与恶魔
- 从一道面试题,到“我可能看了假源码”
- 雨林木风 ghost win7 纯净版系统下载
- 30种鼠标经过图片的酷炫效果
- apt-get install 的参数(add-apt-repository)
- Android知识点——android:configChanges属性