为什么INT_MAX&x = x?

时间:2019-02-12 15:40:44

标签: bit-manipulation bitwise-operators bit and-operator

在对spoj执行ANDROUND问题时,我想为我的细分树编写查询功能。在l,r超出范围的情况下,我需要返回一个数字,该数字在执行BITWISE AND操作时不会更改答案。

在其中一种解决方案中,我观察到与INT_MAX进行任何数字的按位与运算都会返回数字本身。

为什么会这样?

1 个答案:

答案 0 :(得分:-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