C ++:这些按位AND和后面的比较做了什么?

时间:2015-03-09 22:01:56

标签: c++ algorithm median

我目前正在尝试使用两个堆来查找中位数: No. 30 - Median in Stream

我理解一般的基本算法,但我不确定这个确切的实现是如何工作的。具体来说,我完全混淆了这两条线的作用:

if(((minHeap.size() + maxHeap.size()) & 1) == 0)
....
if(size & 1 == 1)

我相信我理解按位AND-它取两个数字并以二进制形式输出一个数字。通过比较== 0或== 1,它将逐字地检查按位AND是否分别为0或1。但是,在找到中位数的背景下,这究竟是做什么的?我知道保持堆积很重要甚至" (并保持两个堆之间的中位数),但除此之外,我并不完全确定。这真的只是一种检查尺寸是否不同的方法吗?

1 个答案:

答案 0 :(得分:1)

我相信如果最低位为零,则第一次测试为真,即sum为偶数。如果 size 是奇数(即LSB已设置),则第二次测试为真。