2012-07-17 5042 views
2

有人可以解釋下面的代碼行嗎?特別是,我沒有得到什麼(short) x & 0x3FF呢?位和0x3FF是做什麼的?

int num = ... //some number. 
return (short) num & 0x3FF; 
+1

它拋出所有,但最低的10位。 – Mysticial 2012-07-17 04:54:28

回答

4

它零出的數量的頂部位,這樣的結果是它本質上是一樣的東西爲模數(NUM,1024)(對於NUM的正值)總是1023之間0和。

沒有看到更廣泛的背景下,不可能知道爲什麼這是在這裏,但這就是它的作用。

+0

感謝您的幫助! – user1467855 2012-07-17 05:01:24

4

0x3FF是二進制數字1111111111,這意味着bitwize與它會給你num的最後10位。

+0

感謝您的幫助! – user1467855 2012-07-17 05:02:11

1

將十六進制轉換爲二進制,0x3FF == 0b1111111111

&執行按位與操作,所以它只會保持低位,如果他們被設置爲打開。
這保證答案不會大於0x3FF == 1023,所以答案被保存到short,因爲我們知道它會適合一個。

+0

感謝您的幫助! – user1467855 2012-07-17 05:01:06

0

它只保留最右邊的10位。

0

的java的操作者&是一個「位與」,意思是兩個操作數中的每一位被AND連接,留下1如果兩個對應位是1

0x3ff是二進制的1111111111,所以AND與這將屏蔽所有,但最低的十位。

轉換爲short(16位數字格式)不起作用。