2017-02-05 24 views
7

我一直在尋找在GitHub上的開源項目之一,我發現在Java代碼以下行,關注有關的代碼

static byte[] byteArray = new byte[1 << 11]; 

在這裏,我們知道,1 < < 11也不過是2048,所以可直接通過給其長度= 2048作爲遵循初始化數組,

static byte[] byteArray = new byte[2048];

那麼爲什麼它是這樣寫1 < <直接代替11的2048。

+0

純粹是一種風格。他們可能已經寫了2048或0x800,或者在Java 7和後來的0b100000000000中,但顯然他們認爲強調唯一的位集是位11是有用的(也許在Java 7之前編碼或者不知道Java 7的二進制文字)。 –

+0

也許他們更感興趣的是位移技術,而不是隻是放一個數字。儘管它純粹是一個如何編碼的問題。 :p –

回答

5

使用明智的操作的原因是爲了清楚這是2的冪。我看到人們混淆了常量。例如8096,它是8192和4096的組合。

我更喜歡做的是使用<< 10<< 20 KB和MB。例如2 << 10 for 2 KB

+0

'Math.pow(2,11)'更具可讀性,不是嗎? – Divers

+1

@Divers可讀性是一個品味的問題,但'Math.pow'是一個'double',所以我不會說, –

+0

@Peter它可以被降級到'int' –