我希望将已签名的int32
存储到未签名的uint32
中,以便稍后我可以从中提取int32
。在存储这样的整数时,不使用uint32
本身的值,但遗憾的是,在这种情况下我不能使用union。我目前这样做的方法是简单地转换它:
int32 signedVar = -500;
uint32 unsignedVar = uint32(signedVar);
func(int32(unsignedVar)); // should supply the function with -500
这似乎有效,但我担心它可能不便携,并且可能会在幕后发生不必要的转换,因为我希望这是无操作。
是否保证-500或任何其他负数保持这种转换?如果没有,是否有“无痛”(没有类型被改变,只有转换方法)替代?
编辑:我最关心的是确保int32
中的值保留在uint32
中,以便以后可以将int32
用作相同值的uint32
{永远不会使用{1}}版本。 (编辑,因为SO要求我解释这不是另一个问题的重复;它没有说明转换的结果应该是什么样的,或者它需要像这样对称,使它太笼统在这里申请)
答案 0 :(得分:2)
如果您的机器使用1s补码或符号幅度算术(至少C标准允许;不确定C ++),则此双转换会将值-0转换为0.如果您的机器使用2s补充,那么这将没事。
那就是说,我不知道过去30年里建造的任何机器都使用2s以外的任何机器来补充算术。