一元减号等于 binop 减号吗?

Is unary minus equivalent to binop minus?

我的 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 产生相同的结果?

通常,是的,除非在您的平台上 uint32_t 是窄类型。然后它将首先被提升为 int 并且将在该类型中进行否定。