Vin*_*ent 23 c c++ bit-manipulation
给定n和m无符号整数类型,将表达式
(n & m) <= m
Run Code Online (Sandbox Code Playgroud)
永远是真的吗?
Oli*_*rth 39
是的,它是真实的.
应该显而易见的是,对于一个必要条件y > x是,至少有一个比特位置被设置为1在y但是0在x.作为&一个位不能设置为1如果相应操作数的位是不是已经1,结果不能大于操作数大.
是的,对于无符号整数数据类型总是如此.
根据掩码的值n,一些1位m可能变为0位; 所有0位都m将保留0在结果中.从保持m尽可能高的角度来看,可能发生的最好的事情是所有1位都将保留在原位,在这种情况下结果将相等m.在所有其他情况下,结果将小于m.
让m是米1米2米3米4米5米6米7米8,其中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
----------------- ------
你不能通过这样做得到任何上述组合.