2016-10-11 33 views
0

我在看一個C++源代碼哪裏有什麼看起來是一個簡單的計算計算混淆。然而,對C++沒有任何瞭解,我不能完全理解它是如何計算的(我的目標是在Excel下進行相同的計算)。與C++「簡單」與符號&

uint64_t fpo = (((ui>>32) << 24) | (ui & 0xffffff)) + 0x123e00; 
PrintAndLog("ui result : %lld [0x%llX]", ui, ui); 

在我的情況下,用戶界面是0x0F007057B9 ,其結果是0xF8295B9

如果我參加了Windows計算器,我做(十六進制模式)

(0x0F007057B9 AND 0xffffff) + 0x123e00 

我收到相同結果(期望爲第一個0xF)

我已經閱讀過某處AND返回1,如果兩個相同的「權重」位都是1 因此,如果我把ui AN d 0XFFFFFF轉換成二進制:

0x0F007057B9 0000111100000000011100000101011110111001 
0xffffff      111111111111111111111111 
------------------------------------------------------- 
      0000111100000000011100000101011110111001 

哪個不作任何改變......

我是不是完全去錯誤的方式?對不起,我英文不好,我來自韓國。 謝謝你幫助我{^^;

+0

你的問題是什麼的'ui' –

+0

UI是類型先前在代碼定義如下:空隙print88x(uint32_t的喜,uint64_t中UI) –

+0

另一種方式寫入相同的事情將是'UI/0x100000000 * 0x1000000 +(UI%0x1000000)+ 0x123e00' –

回答

1

並其

0 AND 0 = 0 
0 AND 1 = 0 
1 AND 0 = 0 
1 AND 1 = 1 

所以,如果你和0XFFFFFF一個數字,你basicly只是不停的數字在這些位置。您填寫缺少的以0

你的情況:

0x0F007057B9 0000111100000000011100000101011110111001 
0xffffff  0000000000000000111111111111111111111111 
------------------------------------------------------- 
      0000000000000000011100000101011110111001 

林不知道,如果這是壽:)

+0

OMG !! 「你用0填寫缺少的」謝謝你! –

+0

但是我不明白爲什麼它給代碼0xF8495B9。並手工處理0x8495B9。 代碼的結果是: UI結果:260216249 [0xF8295B9] 在什麼地方「260216249」(這是十六進制的分解表示)和「F」來自哪裏? 對不起,我不熟悉stackoverflow,我可能需要創建一個新的問題(?) –

+0

對不起,這些現在對我來說太多未排序的數字。 你不需要創建一個新的問題,你可以編輯你的OP。 也許它會有幫助,如果你寫下你的整個計算以發現錯誤。 – TobiasCage