一元减号和二元减号等价吗?

3

我使用负号对一个 unsigned 值进行一元运算时,我的 C 编译器发出了警告,所以我通过从 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,不是完全重复,因为可能存在整数提升的情况。 - Jens Gustedt
1个回答

3
通常情况下,是这样的,除非在您的平台上,uint32_t 是一个窄类型。那么它首先会被晋升为int,然后在该类型中进行负数运算。

在这种情况下,最终结果将是相同的 :-) - 2501

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接