(n&m) <= m 总是真的吗?
Is (n & m) <= m always true?
给定的 n
和 m
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
现在让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)
- 如何在 std::vector 中找到<bool>哪些索引是真的?
- int8_t和uint8_t真的是整数吗?它们有什么用?
- 你如何理解"std: :forward is just syntactic sugar"?这是真的吗?
- 指向数组unique_ptr在调用 release() 后会自动释放动态内存,这是真的吗?
- 列表的向量真的是向量吗?
- 一个C++编译器是为不同的平台(Linux,Windows等)多次编写的,这是真的吗?
- array::operator[] 真的是 noexexcept 吗?
- 数组的维度是在创建数组的那一刻确定的,以后不能更改的,这是真的吗?
- SSE42 & STTNI - PcmpEstrM比PcmpIstrM慢两倍,是真的吗?
- 当内存被分配到Windows中的进程中时,它总是会触发页面错误,这是真的吗
- 即使有C++11/14,给出的答案仍然是"Why switch statement cannot be applied on strings?"真的吗?
- 是的,构造函数返回是当前实例,但我们不能使用返回类型.是真的吗
- Pthread条件变量是连续轮询的替代品,是真的吗
- 在编译时计算C字符串的长度.这真的是constexpr吗
- int**= int*[] 对于数组来说,这是真的吗?
- O'Reilly "Objective-C Pocket Reference"声称C++不支持动态调度,这是真的吗?
- 当类的指针实例超出范围时不调用析构函数是真的吗?
- std::bind 绑定"by value",这是真的吗?
- 为iOS和Android编译c++代码(Xcode).这是真的吗?
- 表达"(ptr == 0) != (ptr == (void*)0)"真的是真的吗?