通过在有符号整数上使用无符号整数,是否有任何性能增益/损失?
如果是这样,这也是短期和长期的吗?
取一个C++积分变量i,并假设你将它的值乘以2.
如果i有签名,我认为该操作在某种程度上是等效的,至少在数学上是:
i = i << 1;
Run Code Online (Sandbox Code Playgroud)
但是如果i类型是无符号的,那么因为无符号值不会溢出但是以模块的范围执行,大概是操作是这样的:
i = (i << 1) & (decltype(i))-1;
Run Code Online (Sandbox Code Playgroud)
现在,我认为实际的机器指令可能比乘法的一系列移位更简洁.但是现代的,比如x86,CPU是否会对unsigned/modulo数学有特定的指令?或者,与带有符号值的数学相比,使用无符号值执行数学运算往往会花费额外的指令?
(是的,在编程时关心这一点是荒谬的;我对纯粹的好奇感兴趣.)
或者重新提出问题:使用无符号值是否存在性能损失?
一般来说:IPhone ARM处理器上最高性能(16位签名?,32位签名?等)是什么?