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

标签 c optimization bitwise-operators bit-shift

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

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

感谢您的帮助!

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

最佳答案

(num + 5) / 10 * 10

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

关于c - 使用按位运算编写 round() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54441806/

相关文章:

c - C 结构中的自动字段重新排序以避免填充

c - 比较数组指针时出现问题

c - 不使用加法运算符将两个数字相加

c - 在不使用 pragma 的情况下禁用 C 中的结构填充

python - 应用资源时访问多个变量的梯度 [Tensorflow]

c# - 在具有原始类型的参数的修饰符中使用 C# 7.2

javascript - immutable.js 过滤和变异(删除)找到的条目

c - char的奇怪行为

java - Java BigDecimal 中的 Karatsuba 乘法实现

c - 弹性 Bison : Building C Compiler - Line number in error message