2012-05-18 2 views
3

посмотреть на этом коде:подписал беззнаковую отливку

void main() 
{ 
int i = -1; 
unsigned u = 1; 

cout << u + i; 
} 

добавление и (без знака) и я (подпись), поэтому я должен быть преобразован в неподписанный тип, поэтому его следует интерпретировать ((2^32) - 1), и выражение должно измениться с: -1 + 1 до ((2^32) - 1) + 1, но когда я запустил код, он будет равен 0 , почему?

ответ

6

-1 в беззнаковое представление максимально возможного числа без знака, может содержать (UINT_MAX).

Добавление 1 к этому оборачивает более из-за свойств unsigned, таким образом, равный 0.

1

(без знака) -1 0xFFFFFFFF. 1 + 0xFFFFFFFF = 0x100000000, который переполняет int и приводит к 0.

Смежные вопросы