C++基础---位操作符
2015-08-16 07:55
295 查看
1. 位操作符
1.1 位操作的定义
位操作:整数特有的操作。位操作:<< 、>>、&、|、^、~共六个操作。
1.2 左移操作
左移操作“<<”:将整数最高位(左端)挤掉,而在右端补0。short int a = 12;//a为0000000000001100 a = a<<1; //a为0000000000011000 =>得到a=24; 左移1位相当于乘2,不管整数a是否有符号。
1.3 右移操作
右移操作“>>”:是在整数的高位挤一个0或1进去,而整数右边的1或0被挤掉。有符号整数,若最高位是1,则高位挤进1,若最高位是0,则高位挤进0。
无符号整数,则一律高位挤进0。
short int a = -2;//a为1111111111111110 a = a>>1; //a为1111111111111111 =>得到a=-1; unsigned short int b=65535;//b为1111111111111111 b = b>>1; //b为0111111111111111 =>得到b=32767;
1.4 位与操作
位与操作“&”:将两个操作数每一位做与操作。short int a=12; //a为0000000000001100 short int b=6; //b为0000000000000110 a = a & b; //a为0000000000000100 =>得到a=4;
1.5 位或操作
位或操作“|”:将两个操作数每一位做或操作。short int a=12;//a为0000000000001100 short int b=6; //b为0000000000000110 a = a | b; //a为0000000000001110 =>得到a=14;
1.6 位异或操作
位异或操作“^”:将两个操作数每一位做异或操作,异或也称对称和,或称无进位加等,若两个操作数相等(都为0或都为1,则其值为0,否则为1),对应位不同取1,对应位同为1取反为0,对应位同为0不做处理。short int a=12;//a为0000000000001100 short int b=6; //b为0000000000000110 a = a ^ b; //a为0000000000001010 =>得到a=10;
1.7 位反操作
位反操作“~”:将一个操作数每一位取反,0变成1,1编程0。short int a=12;//a为0000000000001100 a = ~a ; //a为1111111111110011 =>得到a=-13;
1.8 位操作也有对应的复合赋值操作
a <<= 5; <=> a = a << 5;a >>= 5; <=> a = a >> 5;
a &= b; <=> a = a & b;
a |= b; <=> a = a | b;
a ^= b; <=> a = a ^ b;
1.9 位操作实例
位操作可以帮助实现一些很强调空间的计算,系统编程中的状体位截取肯定用位操作,它也是标准库中bitset容器类的实现基础,有许多问题用位操作实现颇为有效。#include<iostream> using namespace std; void print(int n) { cout<<(n&16 ? "A":"~A")<<" " <<(n&8 ? "B":"~B")<<" " <<(n&4 ? "C":"~C")<<" " <<(n&2 ? "D":"~D")<<" " <<(n&1 ? "E":"~E")<<" " <<endl; } int main() { for(int n=0; n<32; n++) { bool A=n&16, B=n&8, C=n&4, D=n&2, E=n&1; if(A && !B) continue; if(!D && !E) continue; if(B == C) continue; if(C != D) continue; if(E && !(A && B)) continue; print(n); } system("pause"); return 0; } =>编译警告: 1>warning C4800: “int”: 将值强制为布尔值“true”或“false”(性能警告) 1>warning C4800: “int”: 将值强制为布尔值“true”或“false”(性能警告) 1>warning C4800: “int”: 将值强制为布尔值“true”或“false”(性能警告) 1>warning C4800: “int”: 将值强制为布尔值“true”或“false”(性能警告) =>~A ~B C D ~E A B ~C ~D E
参考文献:
[1]《C++程序设计教程(第二版)》钱能——第四章
[2] 百度搜索关键字:C++运算符、位操作符、位操作
相关文章推荐
- C++普通队列容器
- C语言指针的算术运算
- C++ Windows对象和MFC对象的区别
- [C语言][LeetCode][26]Remove Duplicates from Sorted Array
- [C语言][LeetCode][228]Summary Ranges
- 使用线性同余法生成伪随机数/序列(C++实现)
- c语言中scanf输入带空格的字符串以及scanf输入单个字符的问题
- poj1035 spell checker (简单的字符串查找题)
- Log4cpp:为中小型C++项目加上log支持
- iOS基础班之c语言学习复习查漏
- C++对象模型——对象的构造和解构(第六章)
- C语言/C++ 实现汉诺塔代码
- C++写数据到文件
- c++ public, protected, private成员变量,成员函数继承和访问规则实例代码
- C++对象模型——执行期语意学(第六章)
- C++中public,protected,private访问小结
- C语言 memcpy二维数组的复制
- 关于c++析构函数
- C语言-5
- C语言-4