给定n
和m
无符号整数类型,表达式
(n & m) <= m
总是如此?
答案 0 :(得分:39)
是的,这是真的。
y > x
的必要条件应该很明显,1
中至少有一位位置设置为y
,而0
中x
位置设置为&
}。如果相应的操作数位不是1
,1
无法将位设置为{{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 & n
? m
中最初为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
包含m
中n
和中设置的所有位。
~n & m
包含m
中设置的所有位,但n
中没有。
添加两个数量将给出m
中设置的所有位。也就是说,m
:
m = (n & m) + (~n & m)
m ≥ (n & m)