我發現這個代碼算術編碼器,我有點困惑,評論中提到的值來自哪裏。按位運算Java - 從長到二進制
任何人都可以通過這些操作一步一步發生什麼?
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
這些都是我的假設至今:
- 「面具」的定義是由32設定爲1
- 然後轉移這一個龍(我認爲)將給予10萬... 00(這是我在java中已經驗證了自己。
- 然後我會被卡住。我不知道怎麼了「-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?
做了任何答案回答你的問題? – 2013-04-09 12:49:21
我剛剛意識到這個問題有多愚蠢。我如此沉浸在我所做的事情中,以至於我簡化了最簡單的事情。感謝大家回答! – 2013-04-09 15:36:22