gpt4 book ai didi

java - BitSet 的 set 方法如何处理向左移动的位?

转载 作者:行者123 更新时间:2023-12-05 08:35:47 24 4
gpt4 key购买 nike

Java 的 BitSet类有一个方法 Set将一位设置为 1 (=true)。方法源码如下:

public void set(int bitIndex) {
if (bitIndex < 0)
throw new IndexOutOfBoundsException("bitIndex < 0: " + bitIndex);

int wordIndex = wordIndex(bitIndex);
expandTo(wordIndex);

words[wordIndex] |= (1L << bitIndex); // Restores invariants

checkInvariants();
}

除了检查之外,该方法的核心代码是:words[wordIndex] |= (1L << bitIndex) .我可以在作业中清楚地看到,左侧部分是包含相关位的特定单词。但是,我不明白右边的部分(位索引的左移)如何导致请求的(并且只有它)位设置为 1。你能解释一下吗?

最佳答案

1L << bitIndex产生 long , 除其中一位外,其位均为 0。 “1”位的位置由 bitIndex 决定.例如,如果 bitIndex为 10,则第 11 个最低有效位为 1。

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0100 0000 0000

因为1向左移动了10次。通常,第 ( bitIndex mod 64 + 1) 个最低有效位是“1”位。

mask然后与 words[wordIndex] 中的内容按位或运算. words[wordIndex]中的每一位保持不变,因为它们与 0 进行了“或”运算,除了掩码中为“1”的一个地方。 words[wordIndex] 中的那个位由于 OR 的工作原理,无论它最初是什么,都会变成“1”。

关于java - BitSet 的 set 方法如何处理向左移动的位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72924423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com