C++ 0和n之间有多少个数字满足按位属性i&;y==i?

C++ 0和n之间有多少个数字满足按位属性i&;y==i?,c++,bit-manipulation,bitwise-operators,bitwise-and,C++,Bit Manipulation,Bitwise Operators,Bitwise And,这里i是一个介于0和n之间的数字 y是任意随机数 //brute force //say y is 49 count=0; for(int i=0;i<=49;i++){ if((i&y)==i) count++ } cout<<count; //暴力 //假设y是49岁 计数=0; 对于(int i=0;i设b为y中的设定位数 那么 2b 是满足该属性的数的个数 这些数字是那些未在y中设置的所有位也未设置的数字。设b为y中设置的位数 那么 2

这里i是一个介于0和n之间的数字 y是任意随机数

//brute force
//say y is 49
count=0;
for(int i=0;i<=49;i++){
    if((i&y)==i)
        count++
}
cout<<count;
//暴力
//假设y是49岁
计数=0;
对于(int i=0;i设by中的设定位数

那么

2b

是满足该属性的数的个数

这些数字是那些未在y中设置的所有位也未设置的数字。

by中设置的位数

那么

2b

是满足该属性的数的个数


这些数字是那些没有在y中设置的所有位也没有设置的数字。

为什么我不想知道是否有有效的方法来计算“计数”考虑一下,当i中的位与另一位进行anding时,i中的位保持不变,无需强制执行@alain解释说,你只需计算y中的多少位设置为1,并且你的数字是该计数的2次方为什么不?我想知道是否有任何有效的方法来计算“计数”考虑一下这样一种情况,即i中的位在与另一位进行anding时保持不变,无需强制执行@alain解释说,您只需计算
y
中有多少位设置为1,并且您的数字是该数的2次幂,我想您错过了赋值的一些细节。n的影响不在您的公式中涵盖a、 例如,它不起作用:对于y==192==128+64,我们发现b=2。由公式预测的数字是2*2==4。因此,根据公式,4个数字应该匹配。0&192==0。这是一个匹配的数字。0..49范围内的其他3个数字中有哪些也与所描述的条件匹配?是的,我假设
n>=y
。这是假设的保证吗被赋值影响了吗?我想你错过了赋值的一些细节。你的公式没有涵盖n的影响。例如,它不起作用:对于y==192==128+64,我们发现b=2。你的公式预测的数字是2*2==4。所以根据你的公式,4个数字应该匹配。0&192==0。这是一个匹配的数字。还有哪3个数字是我的n从0到49的范围也符合所描述的条件?是的,我假设
n>=y
。这是赋值保证的假设吗?