在对spoj执行ANDROUND问题时,我想为我的细分树编写查询功能。在l,r超出范围的情况下,我需要返回一个数字,该数字在执行BITWISE AND操作时不会更改答案。
在其中一种解决方案中,我观察到与INT_MAX进行任何数字的按位与运算都会返回数字本身。
为什么会这样?
答案 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