201. Bitwise AND of Numbers Range

Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive.

For example, given the range [5, 7], you should return 4.

这题有点神……我一直以为1&1应该是1的……竟然是0……

对于整数m到n,在数值连续变化的过程中,它们的某些高位比特是相同的,而只有低位的比特连续变化。

例如:

整数:33,34,35,36

它们的二进制形式是(为了简单,我们假设每个数值有8个bits):

33 : 00100001
34 : 00100010
35 : 00100011
36 : 00100100

不难看出,它们都具有00100xxx的形式,共同的高位比特是:00100。如果进行按位与运算(&)的话,这些高位是保持不变的。

再看低位(低3位比特)。与运算之后的结果是000。

由上面的分析,可以得到:

为了得到它们与运算的结果,我们只需要找出区间[m, n]范围内所有数值的共同高比特位即可。

又因为m和n是这些数中相差最大的,所以它俩拥有的共同高位比特也是最少的。

所以计算中只需要用m和n即可。

代码如下:

class Solution {
public:
    int rangeBitwiseAnd(int m, int n) {
        
        int t=0;
        while(m!=n){
            m>>=1;
            n>>=1;
            t++;
        }
        
        return m<<t;
        
    }
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cv.bitwise_and 是 OpenCV 中的一个函数,用于对两个图像进行按位与操作。它需要两个参数,即要进行按位与操作的两个图像,以及一个可选的输出图像,用于存储结果。具体使用方法如下: ```python cv.bitwise_and(src1, src2, dst=None, mask=None) ``` 其中,src1 和 src2 是要进行按位与操作的两个图像,dst 是可选的输出图像,mask 是可选的掩膜图像,用于在某些位置上选择性地进行按位与操作。 注意,src1、src2 和 dst 的大小和类型必须相同,否则会出现错误。按位与操作的规则是,对于每个像素,将它们的二进制表示中的每一位进行与操作,得到的结果再转换为十进制数作为输出图像中相应像素的值。 下面是一个简单的例子,演示了如何使用 cv.bitwise_and 对两个灰度图像进行按位与操作: ```python import cv2 as cv import numpy as np # 读入两个灰度图像 img1 = cv.imread('image1.png', 0) img2 = cv.imread('image2.png', 0) # 对两个图像进行按位与操作 result = cv.bitwise_and(img1, img2) # 显示结果图像 cv.imshow('Result', result) cv.waitKey(0) cv.destroyAllWindows() ``` 在这个例子中,我们首先读入了两个灰度图像,并将它们分别存储在 img1 和 img2 中。然后,我们使用 cv.bitwise_and 对它们进行按位与操作,将结果存储在 result 中。最后,我们使用 cv.imshow 显示结果图像,并等待用户按下任意键关闭窗口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值