使用按位运算编写round()函数?

时间:2019-01-30 13:34:13

标签: c optimization bitwise-operators bit-shift

朋友们。 我正在使用PAWN语言(与C类似)编写一些代码,但是我需要优化运行时间。 所以我不想在这里尝试使用按位运算。 我可以对整数进行四舍五入,但是我需要重写它以节省一些时间。

有人可以解释如何将这些操作转换为按位操作吗,为什么? 如果他们做的完全一样,他们如何优化程序的运行时间?

感谢您的帮助!

stock round(num)
{
    new rem = num % 10;
    return rem >= 5 ? (num - rem + 10) : (num - rem);
}

1 个答案:

答案 0 :(得分:1)

(num + 5) / 10 * 10

将很难被击败:检查程序集(尤其是除法),如果编译器判断它们更快,则让编译器优化为按位运算。您的版本有一个分支,可能会导致管道在错误的分支预测基础上转储。