C++:这些按位 AND 和以下比较有什么作用?
C++: What do these bitwise AND's and following comparisons do?
我目前正在完成使用两个堆查找中位数的实现:
No. 30 - Median in Stream
我理解一般的基本算法,但我不确定这个具体实现是如何工作的。具体来说,我对这两行的作用感到非常困惑:
if(((minHeap.size() + maxHeap.size()) & 1) == 0)
....
if(size & 1 == 1)
我相信我理解按位 AND- 它接受两个数字并以二进制形式输出一个数字。通过比较 == 0 或 == 1,它会逐字检查按位 AND 分别是 0 还是 1。但是,在寻找中位数的情况下,这到底有什么作用呢?我知道保持堆 "even"(并保持两个堆之间的中位数)很重要,但除此之外我不完全确定。这真的只是一种检查尺寸是否不同的方法吗?
我相信如果最低位为零,则第一个测试为真,即总和为偶数。如果 size 是奇数(即设置了 LSB),则第二个测试为真。
我目前正在完成使用两个堆查找中位数的实现: No. 30 - Median in Stream
我理解一般的基本算法,但我不确定这个具体实现是如何工作的。具体来说,我对这两行的作用感到非常困惑:
if(((minHeap.size() + maxHeap.size()) & 1) == 0)
....
if(size & 1 == 1)
我相信我理解按位 AND- 它接受两个数字并以二进制形式输出一个数字。通过比较 == 0 或 == 1,它会逐字检查按位 AND 分别是 0 还是 1。但是,在寻找中位数的情况下,这到底有什么作用呢?我知道保持堆 "even"(并保持两个堆之间的中位数)很重要,但除此之外我不完全确定。这真的只是一种检查尺寸是否不同的方法吗?
我相信如果最低位为零,则第一个测试为真,即总和为偶数。如果 size 是奇数(即设置了 LSB),则第二个测试为真。