29分钟http://channel9.msdn.com/Events/GoingNative/2013/Writing-Quick-Code-in-Cpp-Quickly安德烈亚历山大夫斯库说,当使用常数更喜欢0时,提到硬件知道如何处理它。我做了一些汇编,我知道他在谈论什么以及CPU上的零标志
然后他说更喜欢常数1而不是-1。 -1 IIRC实际上并不特殊,但因为它是负数,所以CPU上的符号标志将被设置。从我目前的理解中得出的1只是一个正数,处理器标志上没有位,也没有办法区分0或其他正数。
但安德烈说要优先选择1比-1。为什么?硬件用1做什么比-1更好?
答案 0 :(得分:0)
首先,应该注意的是,Andrea Alexandrescu强调了零和其他两个好常数之间的区别,即使用一个和负一个之间的差异不太重要。他还将编译器问题与硬件问题捆绑在一起,即硬件可能能够有效地执行操作,但是如果在所选择的更高级语言中使用相当清晰的表达式,编译器将不会生成适当的机器代码。
虽然我无法理解他的想法,但至少有两个方面可能比一个方面更好。
否定的确有一些好处。正如您所提到的,对负面性进行测试通常相对容易,因此如果负面值是唯一使用的负值,则可能会以较低的成本处理。此外,有条件地清除基于零或负值的值仅仅是and
操作。 (对于有条件地设置或清除单个位,首选一个而不是负一个,因为这样只需要一个移位和and
。)