У меня есть C ++ unsigned int
, который на самом деле хранит значение со знаком. Я хочу преобразовать эту переменную в знаковое 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
Когда приведение типов изменяет биты переменной в C ++? Например, Я знаю, что преобразование int
в float
изменит биты, потому что int
является дополнением до двух, а float
- с плавающей запятой . А как насчет других сценариев? Мне не совсем понятны правила этого в C ++.
В разделе 6.3.1.3 спецификации C99 говорится, что приведение беззнакового к целому со знаком определяется компилятором!