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

Vin*_*ent 23 c c++ bit-manipulation

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

(n & m) <= m
Run Code Online (Sandbox Code Playgroud)

永远是真的吗?

Oli*_*rth 39

是的,它是真实的.

应该显而易见的是,对于一个必要条件y > x是,至少有一个比特位置被设置为1y但是0x.作为&一个位不能设置为1如果相应操作数的位是不是已经1,结果不能大于操作数大.


das*_*ght 5

是的,对于无符号整数数据类型总是如此.

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


Mar*_*oun 5

m12345678,其中m 是一个.

现在,让我们nÑ 1 ñ 2 Ñ 3 Ñ 4 Ñ 5 Ñ 6 Ñ 7 Ñ 8.

会是m & n什么?在所有位m最初为0,将 0,因为0 & anything为0,即分别为1所有位,将1 的相应位在n1.

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


让我们举个例子来获得更好的直觉:

我们m是11101011.
什么是数字更大的m?11111111(trivial),11111011,111101111,111101010,111111010.

n 1 n 2 n 3 n 4 n 5 n 6 n 7 n 8
↓↓↓↓↓↓↓↓
1 1 1 0 1 0 1 1  
----------------- ------
你不能通过这样做得到任何上述组合.