有人可以解释为什么我在第一种情况下获得肯定的结果而在第二种情况下得到否定的结果。

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

最佳答案

免责声明:我不知道D。这是我使用其他语言与我的背景一起写的。

当对负数(实数)求平方时,该数字变为正数。您正在写含糊的(对人类)表达:

-3^2

这可能意味着:
  • -(3^2) = -9
  • (-3)^2 = 9

  • 从输出来看,我假设编程语言的运算符优先级是第一位的。尝试将最后一行替换为:
    writeln((-3.0L) ^^ 2.0L);  // -9
    

    09-29 21:41