2012-06-08 3 views
0

php가 표준 수학 함수를 계산하는 방법을 이해하는 데 문제가 있습니다.php 연산자 우선 순위

225 + 154 * 256 + 138 * 256 * 256 + 81 * 256 * 256 * 256 (그게 올바른없이 브래킷)

PHP를 생성하여 실행 : 특정 예에서는이 계산을 이 숫자는 1,368,038,113

이 논리적으로 보았을 때 왼쪽에서 오른쪽으로 합계를 계산하면이 숫자가 가까이에 오지 않습니다. 싸구려 간단한 계산기를 사용하면 숫자가 너무 커지기 때문에 256의 마지막 두 곱셈 전에 계산하려고 포기합니다.

이렇게 6 개의 곱셈 값이 256만큼 작은 계산식에서 어떻게 끝날 수 있습니까?

PHP가 실제로이 대답을 어떻게 풀어 내는지에 대한 분석은 훌륭합니다.

p.s. 나는이 페이지 : http://www.homeandlearn.co.uk/php/php2p8.html을 읽었는데, 여전히 위의 내용으로 나를 도왔다.

+1

연산자 우선 순위는 공식적인 수학의 경우와 동일 :/다중 분할이 precdnence 이상 먼저 가서 추가 강제로 빼 할 경우 괄호를 포장 할 수 –

+0

을 빼기/추가 : '5 * 2 + 3'은'5 * (2 + 3)'와 동일하지 않습니다. – andrewsi

+0

저렴한 계산기를 사용하면 정확한 결과를 얻을 수 있습니다 (Mac OS X의 Spotlight). –

답변

4
225 + 154 * 256 + 138 * 256 * 256 + 81 * 256 * 256 * 256 

=>

225 
+ 
154 * 256 = 39,424 
+ 
138 * 256 * 256 = 9,043,968 
+ 
81 * 256 * 256 * 256 = 1,358,954,496 

=>

225 + 39,424 + 9,043,968 + 1,358,954,496 

=>

225 
+ 
39,424 
+ 
9,043,968 
+ 
1,358,954,496 

=>

1,368,038,113 
,

편집

이유는 당신이하고있는 생각 :

225 + 154 * 256 + 138 * 256 * 256 + 81 * 256 * 256 * 256 

=>

225 + 154 = 379 
* 
256 = 97,024 
+ 
138 = 97,162 
* 
256 = 24,873,472 
* 
256 = 6,367,608,832 
+ 
81 = 6,367,608,913 
* 
256 = 1,630,107,881,728 
* 
256 = 417,307,617,722,368 
* 
256 = 106,830,750,136,926,208 
+0

이와 같이 나눌 때 의미가 있습니다. 감사합니다 – Novocaine

1

수학 연산의 기본 순서는 다음과 같습니다. 곱하기/나누기, 더하기/빼기.

슈퍼 간단한 계산기를 사용하면 한 번에 하나씩 작업을 수행합니다. 그래서 간단한 계산기는 아마 이런 지저분한 문자열처럼 당신의 의견을 다룰 것입니다 :

(((((((((225 + 154) * 256) + 138) * 256) * 256) + 81) * 256) * 256) * 256).

1

PHP는 수학의 규칙을 다음과

BODMAS (브래킷, 주문, 나누기, 곱하기, 더하기, 빼기)

,363,210

그래서 귀하의 경우는 다음과 같이 평가합니다 :

225 + 154 * 256 + 138 * 256 * 256 + 81 * 256 * 256 * 256 
225 + 39424 + 9043968 + 1358954496 
1368038113 

다른 순서를 수행하려는 경우

는, 괄호를 사용합니다.

1

통상적으로 곱하기는 덧셈보다 우선합니다. 나는 방정식과 그 올바른 계산 그래서 당신의 문제가 뭔지 보지 못했 ...?

, < == 그게 바로 "이 숫자는 근처에도 올 나던"정확한 이유는

225 + 154 * 256 + 138 * 256 * 256 + 81 * 256 * 256 * 256 
=225 + 39424 + 9 043 968 +1 358 954 496 
=1 368 038 113 

무슨 수를 예상 했습니까? 어떻게 세 었지?

3

결과가 정확합니다. PHP는 먼저 곱셈을 수행 한 다음 더하기를 수행합니다. 그것은 다음과 같습니다

$res = 225 + (154 * 256) + (138 * 256 * 256) + (81 * 256 * 256 * 256) 
$res = 225 + 39424  + 9043968   + 1358954496 
$res = 1368038113 
+0

이것은 또한 얼마나 계산의 좋은 고장, 감사합니다. – Novocaine

+0

나는이 대답이 더 짧고 오류를 바로 설명하기 때문에이 대답이 받아 들여진 대답보다 낫다고 생각한다. – Gerald