У меня есть С++ unsigned int
, который фактически сохраняет подписанное значение. Я хочу передать эту переменную в signed int
, так что значения без знака и знака имеют одинаковое двоичное значение.
unsigned int lUnsigned = 0x80000001;
int lSigned1 = (int)lUnsigned; // Does lSigned == 0x80000001?
int lSigned2 = static_cast<int>(lUnsigned); // Does lSigned == 0x80000001?
int lSigned3 = reinterpret_cast<int>(lUnsigned); // Compiler didn't like this
Когда касты изменяют биты переменной в С++? Например, я знаю, что отбрасывание из int
в float
будет изменять биты, потому что int
является двумя дополнениями и float
является плавающей точкой. Но как насчет других сценариев? Я не понимаю правила для этого в С++.
В разделе 6.3.1.3 спецификации C99 говорится, что кастинг от неподписанного до знакового целого определяется с помощью компилятора!