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 只的相应位在n
1.
这意味着在"最佳"情况下,数字将是相同的,但永远不会变大,因为不能创建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
----------------- ------
你不能通过这样做得到任何上述组合.