C++中的位运算符(抄袭苟的日常)
来源:互联网 发布:映客直播网站源码 编辑:程序博客网 时间:2024/05/23 23:08
程序中的所有数在计算机内存中都是以二进制的形式存储的。位运算就是直接对整数在内存中的二进制位进行操作。
1、& 按位与
如果两个相应二进制位都为1,则结果为1,否则为0;
11 & 3=3
11 -- 00001011
&
3 -- 00000011
= 00000011 = 3
应用技巧:
验证一个数是否被2整除
n%2==0 等同于 n & 1==0 :原因二进制位下,奇数的0号为都为1 偶数为0。1除了0号位为1,其他位都为0,一个数&1之后结果便可判断该数是否为偶数。
2、| 按位或
如果两个相应二进制位有一个为1,则结果为1,若都为0,则为0;
11 | 3 = 11
11 -- 00001011
|
3 -- 00000011
= 00001011 = 11
应用:可以用一个int 的每个位来记录bool值(0或1),从而记录多个值。
3、 << 向左位移
二进制位下,每位向左移动给定的位数(右边补0)
11 << 1 = 22
00001011<<1
00010110 =22
移动n位,则数变成2的n次方倍。但可能造成溢出。
4、 >> 向右位移
二进制位下,每位向左移动给定的位数(右边补0)
11 >> 1 =5
00001011 >> 1
00000101 =5
右边位上的值直接被舍弃掉
5、^位异或
两个相应的二进制位上相同则为0,否则为1
11 ^ 3 =800001011
^
00000011
00001000=8
^运算通常用于对二进制的特定一位进行取反操作,^运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变,即(a^b)^b=a;
^运算可以用于简单加密,比如原始值int a = 19880516;密钥 int key =1314520; 进行加密 int data=key^a = 20665500;解密 data^key == a;
^运算还可以实现两个值得交换而不需要中间变量,例如:
void swap( int &a, int &b)
{
a = a^b;
b = a^b;
a = a^b;
}
6、~取反运算
~运算的定义把内存中的0和1全部取反,所以~运算时要格外小心,你需要注意整数类型有没符号,如果~的对象是无符号整数(不能表示负数),那么他的值就是它与它的上界限的之差,因为无符号类型的数是用0x0000到0xFFFF依次表示的。
如果 ~的对象是有符号的整数,情况就不一样了。
- C++中的位运算符(抄袭苟的日常)
- C中的 "<<" 位运算符
- 2.25 日常(位运算)
- C中的位运算
- C 的位运算符
- C的运算符:位运算符
- Java 和 C 中的位运算符
- C语言中的位运算符
- C语言中的位运算符
- 关于C语言中的位运算符
- Objective-C中的位运算符用法
- C语言中的位运算符
- C语言中的位运算
- C语言中的位运算
- C语言中的位运算
- C语言中的位运算
- C语言中的位运算
- C语言中的位运算
- 解决mysql主从复制不一直情况
- mysql通过经纬度计算任意亮点的距离
- 一种解决服务器架构产品的硬件FW之道
- py 时间与日期
- 自己不知道的基础知识合集
- C++中的位运算符(抄袭苟的日常)
- 1019. 数字黑洞 (20)
- A
- css继承属性和无继承属性
- android 全屏幕显示以及竖屏显示
- Oracle数据库高级查询案例
- 个人界面的禁止tableview的上拉效果
- Android——ViewPager和底部导航的配合
- 序列化 和 反序列化