(n& m)< = m总是如此吗?

时间:2014-02-02 11:05:50

标签: c++ c bit-manipulation

给定nm无符号整数类型,表达式

(n & m) <= m
总是如此?

5 个答案:

答案 0 :(得分:39)

是的,这是真的。

y > x的必要条件应该很明显,1中至少有一位位置设置为y,而0x位置设置为& }。如果相应的操作数位不是11无法将位设置为{{1}},则结果不能大于操作数。

答案 1 :(得分:5)

是的,无符号整数数据类型总是如此。

取决于掩码n的值,m中的某些1位可能变为0位; m中0的所有位将在结果中保留0。从保持m尽可能高的角度来看,可能发生的最好的事情是所有1位都保持不变,在这种情况下,结果将等于m。在所有其他情况下,结果将小于m

答案 2 :(得分:5)

m m 1 m 2 m 3 m 4 m 5 m 6 m 7 m 8 其中m i 是一个

现在让n n 1 n 2 n 3 n 4 ñ<子> 5 名词<子> 6 名词<子> 7 名词<子> 8

什么是m & nm中最初为0的所有位将保持 0,因为0 & anything为0.所有位为1,将仅为1 n中相应位的值为1。

意味着在“最佳”情况下,数字将相同,但永远不会变大,因为不能从0 & anything创建1。


让我们举个例子,以便有更好的直觉:

m为11101011 更大的数字是多少m? 11111111(trivial),11111011,111101111,111101010,111111110。

名词<子> 1 名词<子> 2 名词<子> 3 名词<子> 4 名词<子> 5 名词<子> 6 名词<子> 7 名词<子> 8
↓↓↓↓↓↓↓↓ 1 1 1 0 1 0 1 1
-----------------------
你无法通过这种方式获得上述任何组合。

答案 3 :(得分:2)

是。为了补充其他答案中描述的原因,一些二进制示例清楚地表明,不可能使结果大于任何一个args:

         0
         1
    ------
         0

         1
         1
    ------
         1

    111011
     11111
    ------
     11011   

    111011
    111011
    ------
    111011

给定两个参数,我们可以达到的最高值是,如果两个参数都是相同的值,则结果等于两个参数的值(上面的最后一个例子)。

无论我们将参数设置为什么,都不可能使结果更大。如果你能,那我们就麻烦了。 ;)

答案 4 :(得分:1)

n & m包含mn 中设置的所有位。

~n & m包含m 中设置的所有位,但n中没有

添加两个数量将给出m中设置的所有位。也就是说,m

m = (n & m) + (~n & m)

m ≥ (n & m)