Multiplication de nombres entiers signés et non signés
Bonjour,
Soit le code suivant:
Code:
1 2 3 4 5 6 7
| unsigned int a = 10;
int b = -6;
int tmp;
tmp = a * b;
printf("%d\n", tmp); |
Cela affiche -60.
Mais il me semble que b est converti en unsigned et devient donc très grand, et que ce code fonctionne parce que mon compilateur utilise la représentation en complément à 2.
Est-ce que c'est correct ? Est-il raisonable d'assumer que la majorité des machines et compilateurs actuels utilisent cette représentation ?