<?php
$n = -2;
echo $n ** 2; // $n = -2; -2 ** 2 = 4
echo '|';
echo -2 ** 2; // -2 ** 2 = 4
//结果为: 4|-4
// 正常来说的话 -2 ** 2 = -4 的吧
为啥把-2 赋值给一个变量之后 就是 $n**2=4,其实$n=-2
<?php
$n = -2;
echo $n ** 2; // $n = -2; -2 ** 2 = 4
echo '|';
echo -2 ** 2; // -2 ** 2 = 4
//结果为: 4|-4
// 正常来说的话 -2 ** 2 = -4 的吧
为啥把-2 赋值给一个变量之后 就是 $n**2=4,其实$n=-2
|
imkuangSep 28, 2020 via Android
1
乘方的优先级比减号高,你的第二个实际相当于 0-(2**2)
而第一个的话实际上是先计算了$n=0-2,再去乘方,相当于(-2)**2 |
|
2
@xiri 突然发现你说“ 正常来说的话 -2 ** 2 = -4 的吧”,感觉有点迷惑啊。
负二的平方是等于四啊,二的平方再取负数是负四,说白了就是运算符优先级的问题,符号一般是处理成零减某某某的,优先级当减号看 |
|
iyaozhenSep 28, 2020
3
$n = (-2)
(-2)^2 = 4 你说的是这样 eval("$n ** 2") = eval("-2 ** 2") = eval("-(2**2)") 这个又不是字符串拼接,不是拼好了再执行 |
|
lovecySep 28, 2020
4
整了两年 PHP 了,第一次发现还有这运算符,最奇葩的是优先级居然是第二高的,仅次于 clone/new,真的迷惑。。。。。。。。。。。
|
|
sparrwwSep 28, 2020
5
你平时用的到吗,不讨论骚操作
|
|
cccp2020Sep 28, 2020
6
负数的平方本来就是正数吧 ** 自乘也是求平方的
-2 ** 2 应该是运算符优先级导致的, - ( 2 ** 2 ) |
|
JJstyleSep 28, 2020
7
虽然反常,但是合理,可以这样:
php > echo (-2) ** 2; 4 |
|
ChappakoSep 28, 2020
8
用 bcpow() 吧
|
|
ruyuSep 28, 2020
9
其实 python -2 ** 2 也是 -4
|
|
iNaruSep 28, 2020
10
|
|
chaogao2016Sep 28, 2020
11
我搞了 4 年 php,也是第一次见这个运算符
|
|
12
-.-!!!!
|
|
wanglilongSep 28, 2020
13
也只有面试题会有这种,实际开发过程中这样写怕是会被打吧
|
|
14
其实这东西跟编程语言没有任何关系,**就是乘方运算符,自己想一下数学中-2^2 是多少看看?
乘方的优先级是最高的,-2^2=-(2^2)=-4,(-2)^2=4,没有任何问题 |
|
lovecySep 29, 2020
16
@foundnot404 是哦,仔细想想确实乘、除、乘方这些优先级都比正负号要高
|