-4

在 spoj 上做 ANDROUND 问题时,我想为我的段树编写查询函数。在 l、r 超出范围的情况下,我需要返回一个数字,该数字在执行 BITWISE AND 运算时不会改变答案。

在其中一个解决方案中,我观察到任何带有 INT_MAX 的数字的按位与都会返回数字本身。

为什么会这样?

4

1 回答 1

-1

因为 INT_MAX 是一个仅由 1 表示的数字。对于 32 位 int,它由位序列表示11111111 11111111 11111111 11111111。现在,&操作员检查两个数字在某个索引处的值是否为 1(例如,如果两个数字在索引 5 处的值均为 1,则结果在索引 5 处的值为 1)。如果是这种情况,则结果在该索引中的值为 1,否则,它将在结果的该索引中存储值为 0。

因此,如果您考虑 INT MAX 数字 - 又是位序列11111111 11111111 11111111 11111111和数字 2,例如,它由位序列表示00000000 00000000 00000000 00000010。只有在第二小的索引中,两个数字都有一个 1,所以只有那里的结果才会有 1,而其他地方的结果都是 0。

水平可视化

11111111 11111111 11111111 11111111

&

00000000 00000000 00000000 00000010

=

00000000 00000000 00000000 00000010

于 2019-02-12T15:45:15.677 回答