(n&m) <= m 总是真的吗?

Is (n & m) <= m always true?

本文关键字:是真的吗 lt      更新时间:2023-10-16

给定的 nm unsigned积分类型,expression

(n & m) <= m

永远是正确的?

是的,是真的。

应该很明显,y > x的必要条件是至少在y中将至少一个位置设置为1,而0则将CC_6设置为x。由于&如果尚未1设置为CC_9

是的,对于无符号的积分数据类型始终是正确的。

根据蒙版n的值,m中的一些1位可能变为0位;在结果中,m中0的所有位将保留在0中。从保持m尽可能高的地点,可能发生的最好的事情就是所有1位将保留在适当的位置,在这种情况下,结果将等于m。在所有其他情况下,结果都小于m

m M 1 m 2 m m 3 m m 4 m 5 m 6 m 7 m 8 其中m i /sub>是 bit

现在让n n 1 n 2 n 3 n 4 4 n 5 n 6 n 7 n 8

m & n是什么?m中的所有位最初为0,Will arte 0,因为0 & anything为0。所有的位为1,n中相应位的所有位均为1

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


让我们有一个示例以获得更好的直觉:

m为11101011。
m更大的数字?11111111(Trivial),11111011,111111111111110,11111110。

n 1 n 2 n 3 n 4 n 5 n n 6 n 7 n 8
↓&nbsp;↓&nbsp;↓&nbsp;↓&nbsp;↓↓&NBSP;↓↓&nbsp;
1&nbsp; 1&nbsp; 1&nbsp; 0&nbsp;1 0&nbsp;1 1&nbsp;
------------------------------
您无法从中获得上述任何组合。

是。为了补充其他答案中描述的原因,一些二元示例表明,很明显,不可能使结果大于任何一个ARG:

         0
         1
    ------
         0
         1
         1
    ------
         1
    111011
     11111
    ------
     11011   
    111011
    111011
    ------
    111011

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

无论我们设置什么参数,都不可能使结果更大。如果您能够,那么我们会遇到严重的麻烦。;)

n & m具有 m 中的所有位。

~n & m具有m 中设置的所有位,但在n中没有

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

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