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

4

1 回答 1

3

通常,是的,除非在您的平台uint32_t上是窄类型。然后它会首先被提升到int,然后在那个类型中进行否定。

于 2015-04-24T09:28:04.730 回答