对于我的 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;
}
}
澄清:符号的值在编译时是未知的!
现在,我分别使用signed
整数值为-1
, 0
,1
的 C ,操作是 C 乘法myint * mysign
。但我想知道这是否对性能有影响:对于每个带符号的多重操作,都使用了一个硬件乘法,它可能比否定要慢 | 设置为 0 | 不要碰。
在 C 中执行此操作的理想方法是什么?
如果我们从符号值中去掉值 0(所以只有 -1 和 1 有效),那么理想的方法是什么?
如果你告诉我它们在哪里,特定于架构的黑客/标准不符合是非常好的。