我为算术编码器找到了这段代码,我对评论中提到的值的来源有点困惑。
任何人都可以逐步了解这些操作中发生的事情吗?
protected final long STATE_SIZE = 32; // Number of bits for 'low' and 'high'. Must be in the range [1, 62] (and possibly more restricted).
protected final long MASK = (1L << (STATE_SIZE - 0)) - 1; // 111...111, all ones
到目前为止,这些是我的假设:
- "MASK" 定义了一个 Long 设置为 1
- 然后将其移动 32 (我认为)将得到 100000...00 (我已经在 java.util.
- 然后我就卡住了。我不确定“-1”如何使它们全部变为 1?
我已经使用以下代码自己尝试过:
long STATE_SIZE = 32;
long shifted = 1L << STATE_SIZE-0;
long shiftedMinusOne = shifted -1;
System.out.println("Shifted: " + shifted);
System.out.println("Shifted Minus One: " + shiftedMinusOne);
System.out.println("Shifted Binary: " + Long.toBinaryString(shifted));
System.out.println("Shifted Minus One Binary: " + Long.toBinaryString(shiftedMinusOne));
我的输出是:
Shifted: 4294967296
Shifted Minus One: 4294967295
Shifted Binary: 100000000000000000000000000000000
Shifted Minus One Binary: 11111111111111111111111111111111
谁能告诉我我做错了什么或者为什么 -1 使它们全为 1?