본문 바로가기
척척학사/프로그래밍 언어론

프로그래밍언어론 수식

by 학사쟁이 2023. 11. 6.
반응형

수식의 개요

수식은 값을 나타내는 표현으로 값 : 정수, 실수, 문자, 문자열등이 있다.

연산자와 피연산자로 구성되며 하나의 값을 나타내는 표현으로 연산자는 연산을 수행하는 함수이고, 피연산자는 연산의 대상인 값을 말한다.

연산자와 피연산자의 구성으로는 피연산자와 연산자가 모두 포함될 필요는 없다.

수식과 문장의 차이

◎수식

값을 나타내는 표현

◎문장

처리를 나타내는 표현으로 처리란 값계산, 수행흐름 바꾸기, 값을 화면에 출력하는 등

 

예를 들어 Python에서 1+2의 경우 수식이면서 문장이다. 하지만 if k>2; k=1;이라면 이는 수식은 성립하지 않고 문장만 성립한다. 

C, C++에서는 수식의 끝에 쌍반점을 찍으면 문장이 된다.

수식 : i = 1 + 2  → 3  // printf("Hi") → 2

문장 : i = 1 + 2;  // printf("Hi");

하지만 문장 끝에서 쌍반점을 뺀다고 항상 수식이 되지는 않는다. 다음은 문장을 본다면

if (a > 0);

printf( "positive|n" );

;을 없앤다고 수식이 되지않는다.

수식과 연산자

산술 연산자

 

덧셈, 뺄셈, 곱셈, 나눗셈으로 기본적인 사칙연산자를 포함한다. 그 외 언어에 따라 나머지, 거듭제곱 연산자등이 있다.

C, C++에서는  % 나머지, ++1 증가, --1감소, x++값사용후 1증가, +(부호) 부호유지, -(부호) 부호를 반대

Python //(몫) , % 나머지, **거듭제곱, +(부호) 부호유지, -(부호) 부호를 반대

피연산자의 개수

▶단항 연산자 : 1개의 피연산자 필요 예) ++전위, --후위, +(부호) 부호유지, -(부호) 부호를 반대등

▶이항 연산자 : 두 개의 피연산자

우선순위

▶하나의 수식에 여러 연산자가 사용이 된다면 어떤 것을 우선순위에 따라 연산을 수행

연산자 우선순위 결합방향(같은순위가 있다면 먼저하는것)
++(후위) , --(후위) 1 좌결합
++(전위) , --(전위), +(부호), -(부호) , ! 2 우결합
*, /, % 3 좌결합
+ , - 4 좌결합
>> , << 5 좌결합
> , >= 6 좌결합
== , != 7 좌결합
&& 8 좌결합
| | 9 좌결합

 

타입의 변환

▶주어진 타입의 값을 다른 타입의 값으로 변환

▶피연산자들의 타입이 서로 일치하지 않는 경우에 필요하다. 예를 들어 실수와 정수의 곱이라면 어떻게 될까?

묵시적 타입 변환 : 프로그래밍 언어의 정책에 따라서 컴파일러에 의해 자동으로 변환, 데이터 집합이 커지는 방향의 타입으로 확대변환 ( 정수는 4바이트이고, 실수는 8비트이니 따라서 실수형으로 자동적으로 변환)

명시적 타입변환 : 프로그래머가 명시한 타입으로 변환, 확대변환 및 축소변환 모두가능하다. ex) 1.5*(double) 2

 

관계 연산자

2개의 피연산자를 서로 비교하여 사이의 관계가 관계 연산자와 일치하는지 여부를 확인하는 것을 말한다.

ex)  > , >= , == ,!=

최종적인 결과 값은 참과 거짓

우선순위는 산술연산자보다 우선순위가 낮다.

ex) 1 <2 == 5-3 >1 일 때 5-3을 먼저 한다.

타입변환은 묵시적 타입변환, 명시적 타입 변환 가능하다.

7/2 >= 3.2 → 3>=2 false

 

논리연산자

논리곱, 논리합, 부정등

피연산자 및 결과값으로 참과 거짓

연산자 의미
&& 논리곱
|| 논리합
! 부정

 

우선순위는 관계연산자보다 낮다. 하지만 부정은 2순위이다.

 

단락평가란 모든 논리연산을 수행하지 않고도 수식값을 얻는 것을 말한다.

ex)  true ||... xasd  논리합은 하나만 진실이어도 참이다. flase&& 23 jdnda 논리곱은 뒤에 뭐가 와도 false가 된다.

 

그 외 연산자

C, C++

비트 단위의 논리 연산자 : & , ^ , |, ~

조건연산자 :? :

반응형

'척척학사 > 프로그래밍 언어론' 카테고리의 다른 글

문장  (0) 2023.11.09
복합타입  (0) 2023.11.04
프로그래밍 언어 타입  (1) 2023.10.28
프로그래밍 언어론 변수의 영역  (1) 2023.10.24
변수와 바인딩  (0) 2023.10.12