[英]Signed integer to unsigned and back?
我想將一個有符號的int32
存儲到一個無符號的uint32
,以便以后可以從中提取一個int32
。 uint32
本身的值在存儲這樣的整數時不使用,但不幸的是,在這種情況下我不能使用聯合。 我目前這樣做的方法是簡單地將其轉換:
int32 signedVar = -500;
uint32 unsignedVar = uint32(signedVar);
func(int32(unsignedVar)); // should supply the function with -500
這似乎可行,但恐怕它可能無法移植,並且由於我希望沒有操作,幕后可能會發生不必要的轉換。
是否可以保證-500或其他任何負數都能在此轉換后繼續存在? 如果不是,是否有“無痛”(所有類型都沒有改變,只有轉換方法)替代?
編輯:我最關心確保int32
的值保留在uint32
以便以后可以將其用作相同值的int32
,而從未使用過uint32
版本。 (進行編輯是因為SO要求我解釋這不是另一個問題的重復;它沒有指定轉換結果應該是什么樣,或者它必須像這樣對稱,因此太籠統了。在這里應用)
如果您的計算機使用1s補碼或符號幅度算法(至少C標准允許;不確定C ++),則此雙轉換會將值-0轉換為0。如果您的計算機使用2s補碼,則很好
就是說,我不知道過去30年中制造的任何機器都使用2s補碼以外的東西進行算術運算。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.