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

C 使用位运算编写round()函数?,c,optimization,bitwise-operators,bit-shift,C,Optimization,Bitwise Operators,Bit Shift,嗨,朋友们。 我正在使用PAWN语言(类似于C)编写一些代码,但我需要优化运行时。 所以我不想在这里尝试使用位运算。 我让我的函数对整数进行舍入,但我需要重写它以减少一点时间 有人能解释一下如何将这些操作转换成按位操作吗?为什么? 如果他们做的完全相同,他们如何优化程序的运行时间 谢谢你的帮助 stock round(num) { new rem = num % 10; return rem >= 5 ? (num - rem + 10) : (num - rem); }

嗨,朋友们。 我正在使用PAWN语言(类似于C)编写一些代码,但我需要优化运行时。 所以我不想在这里尝试使用位运算。 我让我的函数对整数进行舍入,但我需要重写它以减少一点时间

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

谢谢你的帮助

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

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

不按2的幂进行除法无法通过按位操作快速完成。但是,编译器会为您处理这些问题。可能的重复项:,您不需要这样的三元运算符。可能的重复项:,,可能的OOP重复项正确的重复项是。同样,只有2的幂是特殊的,
(num + 5) / 10 * 10