괄호 먼저 처리하는게 아니네요
9랑 *를 먼저 스택에 넣어두고 (를 만나면 1+2를 한번에 처리해서 먼저 들어가있는 9* 에 3을 이어붙혀서 연산해주는거 같습니다
결과적으로 괄호 먼저 계산된 값이 나오지만 어쨌든 컴퓨터는 왼쪽부터 먼저 읽는군요
int a=0;
b = a&&(a=1);
에서
괄호를 먼저 처리하는거라면 a=1를 가장먼저 처리하고 그 뒤에 1&&1을 처리해서 b도 1이 되겠지만
사실은 컴퓨터는 늘 왼쪽부터 읽는겁니다
단축평가가 일어나서 뒷문장은 실행조차 하지 않고 값이 0 0 으로 나오게 됩니다(a=1에 괄호로 묶여있음에도 불구하고 실행하지 않죠)
이상 에이쁠을 위해
논리 AND는 원래 그럼 - dc App
&하나만 쓰면 원하는대로 될거야 - dc App
이거 논리연산자 숏서킷이라 산술연산에 그대로 적용된다는 보장이 없음
캬 오졌다
실제 기계에서 돌땐 곱이 합의결과에 의존하는 형태고 레지스터를 써서 계산해야하니까 add가 imul보다 먼저임
우선순위가 문제가 아니라 EXPR OP EXPR에서 좌측 EXPR이 FALSE니 오른쪽은 평가하지 않고 넘기는것 - dc App
산술에서 1+2를 그냥 넘기는 이딴짓하면 결과가 달라지잖아... - dc App
저런 연산은 레지스터 수준에서 끝나도록 컴파일 되니까 스택 모델로 생각한거랑 다름
ㄴ 스택은 파서 얘기 하는것 같은데 - dc App
야이 빡대가리야... 연산자 우선순위표 부터 봐라... 오른쪽에서 왼쪽으로 연산하는 연산자가 버젓이 좋아하는데 지맘대로 결론내고 자빠졌네-_-;;;
a=b=2
이건 a=(b=2)지만 사실 a=을 먼저 읽고 (b=2)를 한번에 처리해서 a=에 붙여주는거져
우에서 좌로 결합된다고 우부터 처리하는건 아닌거같음
=는 우측연관임 나머진 좌측연관이고
바로 계산되는게 형태가 아니고 축약이 필요할때 레지스터로만 끝내야하면 비벼지는거고
파싱은 스택모델인데 어셈까보면 비벼져있음
이래서 병신같은 놈이 레퍼런스 안보고 지맘대로 결론내고서 나중에 대형사고 쳐싸지르고 한다는 말이... "저번에는 됐는데요?"