簡體   English   中英

&bit運算符如何在這里工作?

[英]How does & bit operator work here?

在Java Collection類中,我經常注意到如下代碼

  //ArrayDeque
    public E pollFirst() {
    int h = head;
    @SuppressWarnings("unchecked")
    E result = (E) elements[h];
    // Element is null if deque empty
    if (result == null)
        return null;
    elements[h] = null;     // Must null out slot
    head = (h + 1) & (elements.length - 1);
    return result;
}

什么head = (h + 1) & (elements.length - 1); 做什么? 為什么在這里使用&運算符以及它的用途是什么。

我的問題不是如何和有效,但它在這里有什么用處。

有人能解釋一下嗎?

它是(h + 1) % elements.length的快捷方式,僅當elements.length是2的冪時才有效。 在一些較舊的硬件上,這可能會稍快一些,但我懷疑在現代CPU上仍然如此。

那個&操作不是%真正等價物,想想負數。 情況並非如此,但還有其他地方(如HashMap ),這可以通過以下方式完成:

(n - 1) & hash // n - current capacity, hash - hashcode

由於hashcode是int值 - 它們可以是負數。 使用%而不是&將導致負數,這對於HashMap根本不會發生(因為這是桶號)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM