消极真实的表现

fwe*_*end 3 d exponentiation real-datatype

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

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
Run Code Online (Sandbox Code Playgroud)

Pat*_*k M 5

免责声明:我不知道D.这是用我的背景写的其他语言.

当你对一个负数(实数)求平方时,数字就变为正数.你正在编写模糊的(对人类)表达:

-3^2
Run Code Online (Sandbox Code Playgroud)

这可能意味着:

  • -(3^2) = -9 要么
  • (-3)^2 = 9

从输出来看,我假设编程语言的运算符优先级是先选择.尝试用以下内容替换最后一行:

writeln((-3.0L) ^^ 2.0L);  // -9
Run Code Online (Sandbox Code Playgroud)

  • 实际上,这并不是很模糊.在数学和编程语言中,它都是明确定义的. (2认同)
  • @Joey就像所有运算符在表达式中组合它们的情况一样,如果没有运算符优先级,那将是不明确的,但当然,这就是运算符优先级存在的原因.它使表达式对编译器毫不含糊.但是,如果程序员不知道所涉及的操作员的优先级,那么显然仍然会让他们感到困惑. (2认同)