位运算
来源:互联网 发布:中国水污染地图数据库 编辑:程序博客网 时间:2024/06/03 20:50
位运算
首先,先明确一下一个概念:位运算是通过二进制进行操作的。
首先来认识一下几个位运算的符号。
符号
名称
&
与运算(and)
|
或运算(huo)
<<
左移
>>
右移
~
取反
^
异或
① &
这个就是比较两个二进制数,只有在这两个数的第i位同时是1时,答案的第i位就变成1。也就是说在这一位上,只有两个都是1,答案才能是1。
② |
这个或运算有点像&,但是它是只要在第i位上两个数中有1个是1,那么答案就是1.
③ <<
这个就是把一个数转换成二进制后,整体向左移i位,刚补进来的都为0。
④ >>
这个有点像>>,不过它是向右移。也就是把一个数转换成二进制后,整体向右移i位。
⑤ ~
这个就是在二进制中,把所有1变成0,把所有0变成1。
⑥ ^
这个就是比较两个二进制数,如果第i位相同,那么答案的第i位就是0,否则就是1。
下面就编一个程来更加了解位运算吧!
/*
位运算 ——2015年8月6日10:34:49
*/
#include <iostream>
using namespace std;
long long a=7; /*00000111*/
long long b=4; /*00000100*/
int main()
{
cout<<"& :"<<(a&b)<<endl;
/*
a: 00000111 两数同位为1时答案为1
b: 00000100
______________
00000100 ------ 4
*/
cout<<"| :"<<(a|b)<<endl;
/*
a: 00000111 两数同位有一位为1时答案为1
b: 00000100
______________
00000111 ------7
*/
cout<<"<<:"<<(a<<1)<<endl;
/*
a: 00000111 a<<n
<== 左移n位
a: 00001110 ------14
*/
cout<<">>:"<<(a>>1)<<endl;
/*
a: 00000111 a>>n
==> 右移n位
a: 00000011 ------3
注意最后一位的1右移之后就没了
*/
cout<<"~ :"<<(~a)<<endl;
/*
a: 00000111
~a: 11111000 ------ -8 (这里是负数是因为符号位也被取反了
原来的每一位如果是1就变成0,如果是0就变成1
*/
cout<<"^ :"<<(a^b)<<endl;
/*
a: 00000111 两数同位相同时时答案为0,否则为 1
b: 00000100
______________
00000011 ------3
*/
return 0;
}
运行出来的结果是这样的:
这个也有需要注意的:位运算是在二进制的环境下操作的,而二进制最高位为符号位,即进行位操作时可能会把符号改变了。
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- jquery的ajaxSetup()函数用法:设置全局的ajax默认选项
- 2015信息学夏令营第1、2……天——搜索与递归
- return the index of that peek or valey
- 动态规划
- 宽度搜索
- 位运算
- 2015NOIP总结
- 畅通工程续(最短路)
- 创新班20课3题+总结
- git使用笔记
- LCA
- 创新班21课总结
- 反射机制
- 高斯消元法解方程--gauss