수식의 개요
수식은 값을 나타내는 표현으로 값 : 정수, 실수, 문자, 문자열등이 있다.
연산자와 피연산자로 구성되며 하나의 값을 나타내는 표현으로 연산자는 연산을 수행하는 함수이고, 피연산자는 연산의 대상인 값을 말한다.
연산자와 피연산자의 구성으로는 피연산자와 연산자가 모두 포함될 필요는 없다.
수식과 문장의 차이
◎수식
값을 나타내는 표현
◎문장
처리를 나타내는 표현으로 처리란 값계산, 수행흐름 바꾸기, 값을 화면에 출력하는 등
예를 들어 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 |