簡體   English   中英

有符號整數要無符號並返回?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM