【发布时间】:2011-04-30 18:23:53
【问题描述】:
我有一个简单的问题,假设我有以下代码,例如,它以类似的方式重复了 10 次。
if blah then
number = number + 2^n
end if
评估是否会更快:
number = number + blah*2^n?
这也带来了一个问题,你能不能将一个布尔值乘以一个整数(虽然我不确定从 2^n 返回的类型,它是整数还是无符号等等)? (我在 Ada 工作,但让我们试着概括一下吧?)
编辑:对不起,我应该澄清一下,我正在查看 2 的 n 次方,并且我将 c 放在那里,因为如果我在 c 中遇到这个问题并且我认为那里有我对自己的学习感兴趣的未来这些板上的 c 程序员比 Ada 多(我假设你知道这意味着什么),但是我目前的问题是 Ada 语言,但问题应该是与语言无关的(我希望)。
【问题讨论】:
-
插入符号 ^ 运算符在 C 中表示 XOR,所以请记住这一点。
-
小心。由于 C 没有内置布尔类型,因此无法保证 blah 等于 1 或 0。某些返回 true 或 false 的函数可能会选择返回 1 以外的值来代替 true。
-
@Brian 谢谢,我没有意识到布尔值并不总是意味着 0 和 1,这可能是一个很难学习的课程。
-
没有几个 Ada 程序员在 StackOverflow 上闲逛,我们几乎都设置了 RSS 提要(或类似的东西)来监视“Ada”标签,所以不用担心关于 Ada 程序员没有注意到 Ada 问题 :-)
-
@Marc C - 这很漂亮。我只是手动检查。他是对的,尽管这确实是一个与语言无关的问题。 Ada 补充的唯一问题是它的编译器有更多信息,可以更好地优化工作。所以对于 C 来说是正确的(不要像这样进行微优化)对于 Ada 来说更是如此。
标签: c optimization ada branch-prediction