为什么相同的条件得到不同的结果?

问题描述 投票:0回答:1

我正在解决问题。这是我写的代码

class Solution {
public:
    Solution ()
    {
        ios_base::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
    }
    int singleNumber(vector<int>& nums) {
        int ans = 0;
        for(int i = 0 ; i < 32 ; i++)
        {
            int count = 0 ;
            for(int j = 0 ; j < nums.size() ; j++)
            {
                if((nums[j]&(1<<i))==1) count++;
            }
            if(count%3!=0) ans = ans|(1<<i);
        }
        return ans;
    }
};

对于 nums = [2,2,3,2] 的输入,我的输出是 1,但预期输出是 3。

正确的代码如下

class Solution {
public:
    Solution ()
    {
        ios_base::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
    }
    int singleNumber(vector<int>& nums) {
        int ans = 0;
        for(int i = 0 ; i < 32 ; i++)
        {
            int count = 0 ;
            for(int j = 0 ; j < nums.size() ; j++)
            {
                if((nums[j]&(1<<i))!=0) count++;
            }
            if(count%3!=0) ans = ans|(1<<i);
        }
        return ans;
    }
};

这两个代码仅在

 if((nums[j]&(1<<i))!=0) count++;
条件下有所不同,对我来说似乎相同。我错过了什么?

c++ bit-manipulation
1个回答
0
投票

仅当

(nums[j]&(1<<i))==1
的值为
(nums[j]&(1<<i))
时,您的条件
1
才为真。

另一方面,只要

(nums[j]&(1<<i))!=0
的值不是
(nums[j]&(1<<i))
,条件
0
就为真。

(nums[j]&(1<<i))
可以是
0
1
以外的值。例如,当
2
nums[j]=3
时,值为
i=1

如果您想使用

==1
,您可以使用
((nums[j]>>i)&1)==1

© www.soinside.com 2019 - 2024. All rights reserved.