9
A
回答
18
嘗試使用以下
public long MakeLong(int left, int right) {
//implicit conversion of left to a long
long res = left;
//shift the bits creating an empty space on the right
// ex: 0x0000CFFF becomes 0xCFFF0000
res = (res << 32);
//combine the bits on the right with the previous value
// ex: 0xCFFF0000 | 0x0000ABCD becomes 0xCFFFABCD
res = res | (long)(uint)right; //uint first to prevent loss of signed bit
//return the combined result
return res;
}
5
嘗試
(long)(((long)i1 << 32) | (long)i2)
此移動第一INT由32位(int的長度),則在第二INT ORS左,所以你最終將兩個整體連接在一起。
2
這應該做的伎倆
((Int64) a << 32 | b)
凡a
和b
是的Int32。儘管您可能想檢查最高位發生了什麼。或者把它放在「unchecked
{...}」塊中。
2
要小心這樣擺弄,雖然因爲你會在小端/大端機器上出現問題(exp單聲道平臺並不總是小端)。另外你必須處理符號擴展。在數學上,以下內容是相同的,但涉及符號擴展並且是平臺不可知的。
return (long)(high * uint.MaxValue) + low;
當在運行時發生抖動時,它會導致性能類似於旋轉位。這是關於解釋型語言的好事之一。
6
只是爲了清晰...雖然接受的答案似乎工作正常。所有提交的襯裏都不會產生準確的結果。
這裏是一個班輪,做工作:
long correct = (long)left << 32 | (long)(uint)right;
下面是一些代碼,所以你可以測試一下自己:
long original = 1979205471486323557L;
int left = (int)(original >> 32);
int right = (int)(original & 0xffffffffL);
long correct = (long)left << 32 | (long)(uint)right;
long incorrect1 = (long)(((long)left << 32) | (long)right);
long incorrect2 = ((Int64)left << 32 | right);
long incorrect3 = (long)(left * uint.MaxValue) + right;
long incorrect4 = (long)(left * 0x100000000) + right;
Console.WriteLine(original == correct);
Console.WriteLine(original == incorrect1);
Console.WriteLine(original == incorrect2);
Console.WriteLine(original == incorrect3);
Console.WriteLine(original == incorrect4);
相關問題
- 1. 從兩個表中製作一個FORM
- 2. 如何計算兩個int64數字相乘的結果另一個int64數字?
- 3. 如何將一個Int64解碼回兩個Int32?
- 4. matlab - 如何從一個Java方法返回int64 int64?
- 5. 將兩個Int32結合到Int64中
- 6. 兩個字典,製作一個列表
- 7. 將兩列從一個Excel工作表複製到另一個工作表
- 8. C#MySqlConnector 6.4.4 LAST_INSERT_ID()作爲INT64?
- 9. 製作一個makefile - C
- 10. Excel宏從兩個細胞由兩個片在一個工作簿複製到另一個
- 11. 從mathematica中的兩個表格製作一個有序的對
- 12. 從一個模型製作兩個模型
- 13. 兩個操作/ C++
- 14. 從xproj製作一個包
- 15. 從一個Excel工作簿複製到另一個工作簿通過C#
- 16. 在同一行中製作兩個div?
- 17. 如何製作一個列表兩列?
- 18. VBA從一個工作簿複製到另一個工作簿
- 19. int64 C++ debian6
- 20. 從兩個列表製作一個應用列表中的約束
- 21. 將兩個/幾個製圖控件合併成一個在c#
- 22. 製作一個變量跨兩個控制器可用
- 23. 初始化一個Int64變量
- 24. Excel VBA - 從一個工作簿複製並粘貼兩列到另一個
- 25. GIven兩個二進制數字,從一個副本複製到另一個
- 26. 如何從一個C/C++函數移動到下一個(兩個方向)
- 27. Oracle SQL - 組合兩個表,但是從一個表中複製?
- 28. 製作兩個數組
- 29. 從一個DataFrame複製兩列到熊貓的另一個
- 30. 從兩個控制器
呃,難道不應該是: long res = left; res =(res << 32) res | = right; return res; ?? – ParoXoN 2009-05-05 22:49:58
我認爲你的意思是(res << 32)以上。 – 2009-05-05 22:50:42