C: подтверждение простого арифметического вывода - PullRequest
3 голосов
/ 01 ноября 2011

Могу ли я подтвердить, что следующий код C дает неопределенный результат для b:

unsigned a = 0;
int b = a - 1;

Ответы [ 3 ]

6 голосов
/ 01 ноября 2011

(§6.3.1.3 / 3): «... либо результат определяется реализацией, либо повышается сигнал, определяемый реализацией.»

На типичном оборудовании с двумя дополнениями, я бы ожидалрезультат будет -1.

Обратите внимание, что результат определяется реализацией, а не неопределен.

0 голосов
/ 01 ноября 2011

Это всегда дает значения

 a=0,b=-1  

только если вы хотите проверить это в онлайн c компиляторе

0 голосов
/ 01 ноября 2011

Неявное преобразование типов происходит, когда вы присваиваете без знака int . Таким образом, это не неопределенное поведение.

...