在C中签名与无符号操作

很简单的问题:

我有一个程序在内部和长时间内进行大量的数学计算.为了适应一点点,我做了很长的长期没有签名,因为我只处理正数,现在可以得到更多的价值观.

奇怪的是,这给了我一个15%的性能提升,我确认是简单地做了所有长的未签名的.

这可能吗?无符号数字的数学运算是否真的更快?我记得阅读没有任何区别,编译器会自动选择最快的方式去签名或者无符号.这个15%的提升是否真的使得vars没有签名,或者可能会在我的代码中受到影响?

而且,如果真的是使vars无符号,那么我应该把所有的东西(甚至int)都没有签名,因为我不需要负数,如果我可以保存它,每一秒都是重要的.

解决方法

在某些操作中,有符号整数更快,在其他操作中,无符号更快:

>在C中,可以假定有符号整数运算不包括.例如,编译器将在循环优化中利用这一点.比较可以类似地优化. (这也可能导致细微的错误,如果你不期望这个).
>另一方面,无符号整数没有这个假设.然而,不必处理标志是一些操作的一大优点,例如:除法.由两个恒定幂组成的无符号除法是一个简单的移位,但是(根据你的舍入规则),负数的条件是一个有条件的.

就个人而言,我习惯只使用无符号整数,除非我真的有一个需要签名的值.对于表现而言,这不是正确的.

您可能会看到效果放大了很长时间,(我猜)是64位在你的情况. cpu通常没有处理这些类型的单个指令(在32位模式下),因此签名操作的轻微增加的复杂性将更加明显.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...