단순히 왼쪽에서 오른쪽으로 평가하지 않는 이유는 무엇입니까? 우선 순위에 따라 코드를보다 쉽게 읽을 수있는 방법을 설명 할 수 있습니까? 내게는 더 많은 생각과 오류 가능성이 필요해 보인다. 아인슈타인은 "모든 것은 가능한 단순하게 만들어야하지만 더 간단하지는 않다"고 말했다. 그가 프로그래머가 아니었던 것 같아요. 14에언어가 연산자 우선 순위를 갖는 이유는 무엇입니까?
답변
운영자 우선 순위는 다음 평가합니다
2 + 3 * 4
는 이럴, 20 뜻밖로 평가없이 것이다.
나에게 정의 할 수 있기 때문에 "기대하는"것은 아무것도 없습니다. SIMPLER는 무엇을 이해해야합니까? 그것이 예상되는 것이어야합니다. 2 명의 연산자가있는 장난감 식은 시스템을 모델링하는 방법이 아닙니다. 내가 찾을 수 있었던 모든 대답은 다음과 같습니다. A) 작은 문장 (코드 줄)으로 나눕니다. B) 혼동이있을 수있는 경우 괄호를 사용하십시오. 그렇다면 단순하게 말하면 안됩니다. 기간 - 물음표? 우리에게 우선 순위는 무엇입니까 - 심문? 그것은 무엇을합니까 ??? –
L에서 R로가는 것은 수학 표현식이며 수학 표현식의 표준이기 때문에 예기치 않게됩니다. 이상한 것을 발견하면 컴퓨터 프로그래밍 방법을 배우기 전에 수학을 배우십시오. – Omar
수학과 프로그래밍은 서로 관련이 없다고 생각합니다. 99 %의 시간 프로그래밍은 순차적으로 일을하고 결정을 내리는 것에 관한 것으로, 이는 수학의 일부가 아닙니다. 이것이 요리와 관련된 조리법이 수학이 아니며 조리법이 알고리즘이 무엇인지 보여주는 # 1 예입니다. 저는 수학 학위를 가진 요리사를 모르며, 5 학년 학생들이 할 수있는 것보다 훨씬 적은 프로그래밍을 가지고 있습니다. 그러나 우리는 그들이 똑같다고 생각하는 것 같습니다. 나는 그것을 보지 않는다. 그들이 너무 다른 경우, 다르게 대우하십시오. –
수학에서 컴퓨터 언어가 발명되기 전에 연산자 우선 순위가 있기 때문에
2 + 5 * 3 = 17 (and not 21)
는 언어 혼란을 생성하는 것 +
연산자에 대한보다 *
운영자에 대한 더 높은 우선 순위를 가지고 있지.
++ C의 또 다른 예 : *
운영자가 <<
연산자보다 우선 순위를 가지고 있지 않은 경우
std::cout << 7 * 8 << std::endl;
,이 컴파일되지 것입니다 :
std::cout << 7
가 먼저 평가 될 것이다, A와std::cout
를 산출 결과 (7
이 인쇄 될 부작용이 있음)- 그러면을 평가하고 싶습니다.- 누군가가 정말로 이상한 연산자를 정의하지 않는 한
outputstream
에 정수를 곱하면*
이 정의되지 않습니다.
연산자 우선 순위는 (나는 그들이 실제 우선 순위를 가지고 인식하지 않기 때문에 어떤 경우에는 사람들이 버그를 소개하는 것에 동의하지만) 지금
을 '상식 내에서'불필요한 괄호를 넣어하지 않아도 허용 질문 : 왜 수학은 연산자 우선 순위가 있습니까? This wikipedia article은 역사적인 사실을 언급하고 a discussion forum으로 연결됩니다. 나에게있어서, 중요한 인수는 다항식을 작성할 때 예를 들어.
1+2/3
: 더 연산자 우선 순위가 없다면
(a(x^2)) + (bx) + c
그래서 어떤 점에서 함께 모이는 두 개의 "평가의 흐름"이 있다는 사실과 관련이 있습니까? 귀하의 예에서, 괄호의 첫 번째 부분과 괄호의 두 번째 부분은 독립적이며 첫 번째 플러스가 평가되기 전에 둘 다 "발생"합니다. 나는 그것을 분리 된 문장으로 분해하고 그것이 복잡한 것이라면 임시 변수를 사용할 것이라고 생각한다. 그렇게 어려운가요? –
당신은 단순함을 언급하면서,'ax^2 + bx + c'가 (우선 순위의 일부 규칙에 동의하는 가격으로) 쓰기가 더 간단하다고 주장합니다. 당신은 '별도의 진술로 분해하라'는 말은 이해하기가 더 쉽다고 말합니다 (더 많은 것을 읽고 쓰는 댓가로). 두 가지 방법 모두 약간의 의미에서 더 간단합니다. –
방정식을 보는 이러한 방법 중 _ 정사각형을 완성하는 것이 더 자연스럽지 않습니까? 괄호 안의 하나. 중요한 수학적 구조는 임시 변수를 사용하여 상실됩니다. 다항식의 최적의 _ 평가 _가 Horner의 규칙을 사용한다는 것은 사실이지만 그것은 괄호 안에있는 정글입니다 ... –
는이 표현을 평가하는 것입니다 방법, 예를 보자
연산자 우선 순위없이ax^2 + bx + c
, 하나는 그들을 작성해야 음, 어떤 사람들은 1+2
의 합을 3
으로 나누고 싶다고 말합니다. 추가하려는 기타 2/3
~ 1
!
L 2 R! 젠장! –
디지털 세계는 단순히 괄호, 지수, 나눗셈, 곱셈, 덧셈, 뺄셈 등의 규칙 인 BEDMAS
규칙이 적용되는 구식 "실제"세계를 단순히 따릅니다.현실을 refedefine와 프로그래머가
(1 + 2) * 3 = 9
v.s.로
1 + 2 * 3
을하고 끝낼려고보다
더 나은
은 현실 세계를 따르도록 realworlder1 + (2 * 3) = 7
을하고 누군가가 잘못 "1을 수행"때문에 잘못된 대기 강하 프로필에 수백만 달러 프로브를 전송.
... 거의 발생하지 않았습니다. http://en.wikipedia.org/wiki/Mars_Climate_Orbiter –
예. 마일 v.s. 킬로미터 또는 무엇인가. 또는 그것은 v.s 파운드였습니다. 킬로그램? 어느 쪽이든, 믿을 수 없을 정도로 사소한 실수. –
파운드 - 초와 뉴턴 - 초 –
우선 순위의 목적은 (a) 표준화하고 (b) PEMDAS와 같이 수학에 설정된 표준을 유지하는 것입니다.
프로그래밍하기 수 백 년 전에 진화 한 완전히 다른 영역에서 표준을 유지하십시오. 왜? –
@AndrewLazarus 그는 합법적 인 질문을 가지고 있습니다. 왜, 표준화되지 않았지만 충전기처럼 될 수있는 세계에 대해 생각해보십시오. 모든 것을 맞추는 충전기가 하나 있다면 많은 도움이됩니다. 이것은 기본적으로 똑같은 일입니다. 2 + 3 * 4는 수학에서 한 가지를 의미하고 프로그래밍에서 다른 것을 의미합니다. –
@ Dgrin91, 나는 질문에 신경 쓰지 않지만 그의 후속 의견은 다른 어떤 것보다 논쟁의 여지가 많습니다. –
APL에는 연산자 우선 순위 (괄호는 제외)가 없습니다. 코드는 오른쪽에서 왼쪽으로 읽습니다 (예 : 히브리어 또는 아랍어). 즉, APL은 틈새 시장의 언어이며, 이것이 이유 중 하나입니다. 이미 다른 답변이 지적한 것처럼 대부분의 다른 언어는 오랜 기간 설정된 산술 규칙을 모방합니다.이 규칙은 일반적인 사용 사례 (즉, 실제 문제)를 모델링 할 수있는 방법에서 발생하는 것처럼 보입니다. 괄호.
OK, 수학은 Shift, dereferencing, boolean 운영자 등이 포함될 수 있습니다. 언어는 십여 개 이상의 우선 순위 수준을 가질 수 있습니다. 실제 사람이 사용하려고했던 시스템에는 정상적인 사람이 참여할 수 없습니다. 그것은 말하고있는 것과 같습니다 : 10 개의 흠집이 벼랑에서 사라졌습니다. 더 많은 것이 항상 더 나은 것은 아닙니다. 어떤 시점에서 우리는 중단을 선언해야하며, 아니, 포리스트가 그 방향으로 너무 생각하고 있다고 말해야합니다. BASIC이 "시작에서 다시 시작"또는 "그냥 다시 시작 하시겠습니까?" –
다시 한 번 가장 우선적 인 사용 사례에서 수동 그룹화 (즉, 괄호)의 필요성을 최소화하기 위해 선행 테이블을 선택하는 것이 좋습니다. 이것이 깨진 사례를 원한다면 C++ 스트림에서 오버로딩 된 삽입 연산자로'<<'를 사용하려면 우선 순위가 비트 시프트에 더 적절하기 때문에 괄호가 필요합니다. C/Java 우선 순위 테이블이 너무 복잡하다면 아무도 중복 괄호 삽입을 막지 못합니다. 까다로운 경우에는 이것이 바람직하고 표현식의 구조를 강조하는 것이 바람직하다고 생각합니다. –
APL과 같은 우선 순위 규칙을 없애거나 더 정확하게 하나의 규칙 만 사용하는 것이 가능합니다.
"함수의 오른쪽 인수는 해당 함수의 오른쪽에있는 전체 식의 결과입니다. 간단하고 일관된 재귀 우선 규칙이 있습니다." "J"(APL이 변형)에
예를 들어
:
1+2*3 => 7 Computed as 1+(2*3)
2*3+1 => 8 Computed as 2*(3+1)
APL (그리고 J)가 많은 사업자, 그것은 각각의 우선 순위와 규칙을 기억하기 어려울 것하고 모두들.
"1 2 3 many"나는 그것이 두껍게 빨리된다고 생각합니다. C에서와 같이 12 단계는 너무 많아 직선을 유지할 수 없습니다. 흉상. 한 문장을 다르게 쓰는 것보다 차트를 참조하는 것이 더 많은 시간을 낭비합니다. –
연산자 우선 순위가있는 이유는 전체 숫자가 2*4
인 것과 같아야하기 때문입니다.
따라서 2*4
이없는 방식으로 생각할 수 있습니다. 단순히 8
입니다.
그래서 기본적으로 다음과 같이 합계를 "단순화"합니다. 2+10*2
기본적으로는 2+20
입니다.
다음 합계와 같습니다 : 2143+8^2+6^9
. 2143+262144+10077696
을 쓰고 싶지 않습니다. (그리고 당신이 훨씬 더 큰 공식을 가지고 있다면 이것이 어떻게 생겼는지 상상해보십시오.)
기본적으로 합계의 모양을 단순화하는 것입니다. 그리고 덧셈과 뺄셈은 가장 기본적인 연산 유형입니다. 이것이 바로 우선 순위가있는 이유입니다. 합계의 가독성을 높이는 것입니다.
내가 말했듯이, +
과 -
연산자가 가장 기본적인 연산자이므로, 먼저 "복잡한"연산자를 먼저 해결하는 것이 좋습니다.
확인. 그러나 프로그래밍에 많은 운영자가 있으며 결국에는 시각적 단서와 두뇌 파워가 나옵니다. 그렇다면 너무 무거워서 들어 올릴 수없는 돌을 만드는 이유는 무엇입니까? –
이 핸드 웨이브는 아무 것도 설명하지 않습니다. – EJP
@EJP 좋습니다. 그렇다면 이것이 당신에 따른 이유가 아니라면, ** 그들은 왜 당신에 따라 존재합니까? "진짜"대답은 수학에서 비롯된 것이 분명합니다. 다른 모든 대답은 수학에 왜 그들이 "발명 된"이유인지에 대한 명확한 이유를 제시하지 못합니다. 그렇다면 당신의 대답은 무엇입니까? – w00
- 1. 연산자 ++의 우선 순위와 &&
- 2. RPN의 연산자 우선 순위
- 3. C 연산자 우선
- 4. dependsOnMethods 및 우선 순위를 사용하는 TestNg가 우선 순위를 위반합니다.
- 5. 어떻게 vb.net에서 연산자 우선 순위를 설정할 수 있습니까
- 6. 참조를 통해 할당자를 통해 연산자 우선 순위를 이해하려고 시도 함
- 7. 우선 순위를 사용할 때 RequireJS가 작동하지 않는 이유는 무엇입니까?
- 8. 큐의 우선 순위를 높이십시오.
- 9. Windows에서 우선 순위를 높이시겠습니까?
- 10. 연산자 우선 순위 (! =와)
- 11. PHP MySQL이 우선 순위를 선택
- 12. 리눅스에서 스레드의 우선 순위를 높입니다.
- 13. 우선 순위 큐에서 우선 순위를 높이십시오.
- 14. 연산자 오버로드 및 우선 순위
- 15. 파이썬에서 연산자 우선 순위 변경
- 16. Python에서 연산자 우선 순위 감춤
- 17. 문자열에서 문자 우선 순위를 지정해야합니다.
- 18. CSS 클래스의 우선 순위를 지정하는 방법은 무엇입니까?
- 19. CSS 클래스의 우선 순위를 재정의하는 방법은 무엇입니까?
- 20. 아이폰에서 우선 순위를 설정하는 방법은 무엇입니까?
- 21. 스레드 우선 순위를 지정하는 방법은 무엇입니까?
- 22. 대기중인 이벤트의 우선 순위를 지정하는 방법은 무엇입니까?
- 23. hadoop 클러스터 우선 순위를 설정하는 방법은 무엇입니까?
- 24. 안드로이드 서비스의 우선 순위를 설정하는 방법은 무엇입니까?
- 25. 내 CCMenu의 우선 순위를 지정하는 방법은 무엇입니까?
- 26. 겹치는 버튼의 우선 순위를 클릭하는 방법은 무엇입니까?
- 27. SAPI에서 문법에 우선 순위를 부여하는 방법은 무엇입니까?
- 28. ScheduledThreadPoolExecutor : 작업의 우선 순위를 지정하는 방법은 무엇입니까?
- 29. 이맥스에서 열로 우선 순위를 구성하는 방법은 무엇입니까?
- 30. 람다 표현 우선 순위를 이해할 수있게 도와주세요.
수학, 연산자 우선 순위에도 적용됩니다! – NINCOMPOOP
우리 나라의 7 학년 때 운영자 우선 순위가 배웁니다. 컴퓨터 프로그래머는 IMO 교육 수준 이상이어야합니다. – Omar
어떤면에서는 사실이지만 다른면에서는 그렇지 않습니다. 아이들은 수학을 모른 채 프로그램을 쓸 수 있습니다. 모차르트는 3 세 때 여전히 연주되는 곡을 썼습니다. 프로그래밍에 많은 교육이 필요하다는 암시를 좋아하지 않습니다. 사실이 아닙니다. –