Я хотел бы сохранить подписанный int32
в неподписанном uint32
, чтобы я мог извлечь из него int32
. Значение самого uint32
не используется, когда оно хранит целое число, подобное этому, но я не могу использовать объединение в этом случае, к сожалению. Так я в настоящее время сделать это, просто превращая его:Подписанное целое число без знака и обратно?
int32 signedVar = -500;
uint32 unsignedVar = uint32(signedVar);
func(int32(unsignedVar)); // should supply the function with -500
Это, кажется, работает, но я боюсь, что это не может быть переносным, и что может быть излишние переходы происходят за кулисами за то, что я В надежде, что нет-op.
Is -500 или любое другое отрицательное количество гарантировано, чтобы выжить в этом конверсии? Если нет, есть ли «безболезненный» (ни один из типов не изменен, а только метод конверсии)?
Edit: Я больше всего обеспокоен убедившись, что значение в int32
сохраняется в uint32
поэтому он может быть использован в качестве int32
одного и того же значения позже, версия uint32
никогда не используется. (редактирование, потому что SO попросил меня объяснить, как это не дублирует другой вопрос, в нем не указывается, какими должны быть результаты преобразования, или что он должен быть симметричным, как это, делая его слишком общим, чтобы быть применяемый здесь)
Зачем вам нужно туда и обратно? – NathanOliver
использовать reinterpret_cast? –
@NathanOliver - tbh, лень. Есть крайний случай, когда в массив может быть отрицательный индекс, и я не хочу писать машинное оборудование в конвейер, чтобы справиться с ним. –