2014-02-06 151 views
2

我有相當簡單的方法naf請與十六進制/十進制數計算

public int naf(int NN, int AA, int FF, int Q) { 

    int mike = FF + 0x20 * AA + 0x200 * NN; 

    if (Q == 1) { 
     mike += 0x4000; 
    } 
    return mike; 
} 

我可以理解,這種方法接受4個整數,並返回一個整數。在第二行中,計算有點混亂。我覺得0x部分與十六進制數字格式有關,但輸入參數是十進制的。我也有這樣的感覺,即0x可能使這些計算可行,但我不確定。

什麼的0x要約和方法如何能夠使十六進制的計算,當輸入小數點?

+3

十六進制和十進制只是兩種方式代表一個數字,它不會改變實際的計算。 –

+1

這是所有二進制到最後我的好人。 – christopher

+0

'0x'只是一種編寫十六進制數字的方法。 '0xa'和'10'是相同的數字,並且可以在兩者上進行相同的計算。 – Trenin

回答

1

整數常量可以是十進制的形式(例如。 32),十六進制(例如,0x20)和八進制(例如040)。不同之處爲十進制:無前綴,十六進制:前綴0x和八進制:前綴0

因此,

int mike = FF + 0x20 * AA + 0x200 * NN; 

真的只是

int mike = FF + 32 * AA + 512 * NN; 

哦,事實上,FF也是「十六進制形式」上不會在所有問題,它只是一個方法參數和可能也被稱爲steven ... :-)

乾杯,

2

有沒有這樣的事情作爲十六進制計算。
你有一個整數表達式,它只是在它
兩個數字以十六進制格式表示。

int mike = FF + 0x20*AA + 0x200 * NN;

相同:

int mike = FF + 2 * 16 * AA + 2 * 16 * 16 * NN;

這是相同的:在Java

int mike = FF + 32 * AA + 512 * NN;

+1

我認爲是相反的 - 因爲所有的計算機計算都是二進制的,所以沒有像十進制計算那樣的想法。十六進制和十進制只是向用戶表示這些數字的方法。 – Trenin

+0

@Trenin我沒有提到任何地方的小數計算。我寫了'整數計算',後來我改成'整數表達式'。 –

2

對於計算機來說,數字是如何呈現給你的並不重要,可以是十進制數(基數爲10,正如我們自然熟悉的),十六進制數(基數爲16),八進制數(基數爲8),二進制數(基數爲2),你可以命名它(儘管在Java中只有八進制,十進制和十六進制是可能的)。在內部,它們都被存儲爲二進制數字,這是一系列的零和一個。

在你的代碼可以自由選擇你覺得最舒服的格式。默認情況下,Java編譯器假定你正在輸入它的十進制數字,但是通過在0x或0之前加上數字前綴,你可以告訴它們分別將它們解釋爲十六進制或八進制數字。

我建議你嘗試在數字系統讀了。

1

十進制或十六進制,只有當你表達的文字,如適用:

int a = 0xfa; // hexadecimal notation for literal on the right hand side 
int b = 251; // decimal notation for the literal on the right hand side 

一旦值已被存儲在變量系統不關心,如果您使用十進制或十六進制格式來表達你存儲的值:

int c = a + b; // numbers are added, regardless of you they were expressed above 
+0

非常感謝您的回答!如果我想打印出c,輸出結果是什麼? – Thanos

+0

如果我正確地得到它System.out.println(「c =」+ c);應該給你502,這是251 + 251,這是251 + 0xfa。十六進制表示法中的0xfa與十進制表示法中的251相同。 –

+0

對不起,0xfa實際上是250,所以c將是501或251 + 250或251 + 0xfa。我並不總是在我的腦海中獲得正確的轉換。 –