有人可以解释为什么我在第一种情况下得到肯定的结果而在第二种情况下得到负面结果。
auto r1 = -3.0L;
auto r2 = 2.0L;
writeln(typeid(r1)); // real
writeln(typeid(r2)); // real
writeln(typeid(r1 ^^ r2)); // real
writeln(r1 ^^ r2); // 9
writeln(typeid(-3.0L)); // real
writeln(typeid(2.0L)); // real
writeln(typeid(-3.0L ^^ 2.0L)); // real
writeln(-3.0L ^^ 2.0L); // -9
答案 0 :(得分:5)
免责声明:我不知道D.这是用我的背景写的其他语言。
当你对一个负数(实数)求平方时,数字变为正数。你正在写出模糊的(对人类)表达:
-3^2
这可能意味着:
-(3^2) = -9
或(-3)^2 = 9
从输出结果来看,我认为编程语言的运算符优先级是先选择。尝试用以下代码替换最后一行:
writeln((-3.0L) ^^ 2.0L); // -9
答案 1 :(得分:2)
上面的源代码没有错。即使是好的,旧的FORTRAN也具有最高优先级的幂运算符(例如,请参阅http://h21007.www2.hp.com/portal/download/files/unprot/fortran/docs/lrm/lrm0067.htm)。因此,在具有幂函数的几乎所有现代编程语言中,表达式-3^2
将被评估为-(3^2)
。
即使在数学表达式中,此规则也是相同的:http://en.wikipedia.org/wiki/Order_of_operations#Exceptions_to_the_standard