Когда преобразование изменяет биты значения в C ++?

У меня есть 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 говорится, что приведение беззнакового к целому со знаком определяется компилятором!

19
задан M. Dudley 18 November 2010 в 19:19
поделиться