conversion non signée à signée

De considérer les éléments suivants:

#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

Je comprends pourquoi "un" ne donne pas le résultat attendu. Mais pourquoi "b" et "c" fail me énigmes. Pour les "b", j'ai pensé après le casting de "x" à "int", le résultat sera "int".

Pourriez-vous svp m'éclairer?

edit: ne pas le compilateur avertir? g++ (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5

Merci,

Quelqu'un

source d'informationauteur Somebody