C++中的位运算

基本知识

  最近博主在刷Leedcode题,很多人都是采用位运算来解题的,看的我满脸雾水,所以上网收集了一下c++中关于位运算的知识,为此总结一下,有不妥的地方还望指正。

  程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理)。[百度百科]

下面的a和b都是整数类型,则:
这里写图片描述

位运算分析

1. 与运算&
双目运算。二个位置位等于1时,结果等于1,其它的结果都等于0。

a b result
0 0 0
0 1 0
1 0 0
1 1 1

(1)例子说明
11&3 = 3

   00001011
&  00000011   
=  00000011 = 3

(2)与运算用途
i. 我们判断一个数是否被2整除,一般都写成 if(n % 2 == 0)现在可以换成 if((n&1) == 0)
换句话说,这可以用来判断一个整数的奇偶,二进制的最末位为0表示该数是偶数,最末位为1表示该数为奇数。

ii与运算的一个用途是检查指定位是否置位(等于1)。例如一个BYTE里有标识位,要检查第4位是否置位,代码如下:

 BYTE   b   =   50;  
 if   (   b   &   0x10   )  
         cout   <<   "Bit   four   is   set"   <<   endl;  
 else  
         cout   <<   "Bit   four   is   clear"   <<   endl;  

上述代码可表示为:

     00110010     -   b  
  &  00010000     -   &   0x10  
----------------------------  
      00010000     -   result  

可以看到第4位是置位了。

2.或运算 |
双目运算。二个位只要有一个位置位为1,结果就等于1。二个位都为0时,结果为0。

a
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值