Является ли унарный минус эквивалентным бинарному минусу?

Мой компилятор C выдавал предупреждение при использовании унарного минуса для значения unsigned, поэтому я исправил предупреждение, выполнив вместо этого вычитание из 0.

Теперь мне интересно, эквивалентен ли текущий код исходному:

uint32_t a, b; // assume b is initialized and non-zero

a =  -b   % b; // old code
a = (0-b) % b; // current code

Мой вопрос: для тех же значений b будут ли обе строки кода давать одинаковый результат для a?


person Log    schedule 24.04.2015    source источник
comment
@juanchopanza, нет, не точная копия из-за возможного целочисленного продвижения.   -  person Jens Gustedt    schedule 24.04.2015


Ответы (1)


Обычно да, если только на вашей платформе uint32_t не будет узким типом. Затем он сначала будет повышен до int, и в этом типе будет выполнено отрицание.

person Jens Gustedt    schedule 24.04.2015
comment
В этом случае конечный результат будет таким же :-) - person 2501; 24.04.2015