Jo *_* So 1 c bit-manipulation
对于我的C计算,我需要一个可以执行以下操作的符号类型(可以使用关联的运算符):
type sign_t = -1 | 0 | 1
integer mult_sign(integer i, sign_t s)
{
switch (s) {
case -1: return -i;
case 0: return 0;
case 1: return i;
}
}
Run Code Online (Sandbox Code Playgroud)
澄清:在编译时不知道符号的值!
现在,我用C signeds的整数值-1,0,1,分别和操作是C乘法myint * mysign.但我想知道这是否有性能影响:对于每个多符号操作,使用硬件乘法,这可能比否定更慢.设为0 | 别碰.
在C中这样做的理想方法是什么?
如果我们从符号值中取走值0(因此只有-1和1有效),那么理想的方法是什么?
如果你告诉我他们在哪里,建筑特定的黑客/标准不合格是非常好的.
unw*_*ind 11
乘法似乎是一个很棒的选择.
它非常简洁明了,仅依赖于整数的基本(易于理解)数学属性.
您没有多说您的执行环境,但在典型的桌面CPU上:s整数乘法很长一段时间是单周期的.所以很难想出更快的东西.
此外,进行乘法消除了分支以"决定"做什么的需要,这通常比跳转做"更简单"更好(更好).