2014-03-26 29 views
2

我發現了InterlockedExchange函數,它允許我交換兩個簽名的 32位變量(LONG)。什麼是原子交換兩個無符號32位變量(ULONG)的正確方法?

但是,什麼是在Windows下自動交換兩個無符號 32位變量(ULONG)的正確方法?

我沒有看到使用Microsoft提供的功能來做這件事的明顯方法。

(考慮到微軟還告訴我,轉換無符號整數符號整數的結果是在某些情況下implementation-defined

回答

2

只需使用一個類型鑄:

ULONG value1, value2; 
InterlockedExchange((LPLONG)&value2, (LONG)value1); 
+0

正如我所說的(見上面的鏈接),則'(LONG)'用於不能被表示結果鑄件實現定義的。那麼你如何知道發生了什麼,如果'value1'是例如等於'4000000000u'不適合'LONG'? –

+0

如果你沒有忽視這裏的其他答案,3分鐘前,你會知道你爲什麼弄錯了......這是真的,即使我沒有那麼多的代表 – deviantfan

+0

@ user3465629實現定義的行爲是記錄:[長到ULONG保留位模式](http://msdn.microsoft.com/en-us/library/xbfs6fd4(v = vs.110).aspx)。 –

0

在你的鏈接,鑄造unigned東西種類不同尺寸
(和/或浮點數的東西)進行解釋。
只能在同一類型的有符號和無符號之間鑄造
應該沒有任何問題。

相關問題