преобразование без знака в знаковое

Примите во внимание следующее:

#include <iostream>

int main() {

    unsigned int x = 3;
    unsigned int y = 5;

    std::cout << "a: " << x - y        << std::endl;

    std::cout << "b: " << ((int)x) - y << std::endl;

    std::cout << "c: " << x - ((int)y) << std::endl;

    std::cout << "d: " << ((int)x) - ((int)y) << std::endl;

}

$ g++ -Wconversion -Wall uint_stackoverflow.cc -o uint_stackoverflow && ./uint_stackoverflow
a: 4294967294
b: 4294967294
c: 4294967294
d: -2

Я понимаю, почему «а» не дает ожидаемого результата. Но почему «b» и «c» терпят неудачу, меня озадачивает. Для "b" я подумал, что после преобразования "x" в "int" результат снова будет "int".

Не могли бы вы просветить меня?

edit: Разве компилятор не должен предупреждать? g ++ (Ubuntu / Linaro 4.4.4-14ubuntu5) 4.4.5

Спасибо,

Кто-нибудь

11
задан Somebody 27 April 2011 в 07:56
поделиться