2015-04-24 3 views
3

Мой компилятор 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?

+1

@juanchopanza, не точный дубликат из-за возможного целостного продвижения. –

ответ

3

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

+0

В этом случае конечный результат будет таким же :-) – 2501

Смежные вопросы