나의 IT일지
연산자(산술, 대입, 증감, 비교, 논리) 본문
프로그램은 CPU가 처리하는 명령어의 집합으로, 입출력함수를 통한 명령어를 사용하지만, 연산자를 통한 명령어를 사용할 수 있다. 그래서 우리는 다양한 연산자를 활용할 수 있어야 한다.
연산자
연산자란 CPU에서 변수나 상수를 연산을 하기 위한 명령어로, 평범하게 생각하는 "+,-,*,/"가 연산자에 속한다. 이때 연산의 기능을 가진 문자를 연산자, 연산를 당하는 문자를 피연산자라고 하며, 피연산자의 갯수에 따라 단항 연산자, 이항 연산자, 삼항 연산자 등으로 연산자가 구별이 된다.
연산자에도 기능에 따라 산술 연산자, 대입 연산자, 증감 연산자, 관계 연산자, 논리 연산자, 형 변환 연산자, 비트 연산자 등등으로 구분할 수 있다. 그리고 이 글에서는 산술 연산자, 대입 연산자, 증감 연산자, 비교 연산자, 논리 연산자에 대해서 알아볼 것이다.
산술 연산자
산술 연산자는 수학에서 사용하는 사칙연산으로 값을 연산하는 명령어로, 두 값을 더하고 빼고 곱하고 나누고 나머지를 구하고 부호를 변경하는 역할을 한다.
산술 연산자로 식을 만들 때, 수학에서는 숫자나 미지수로만 식을 만들지만, 프로그래밍에서는 문자형인 값으로도 식을 만들 수 있다.
연산자 | 이름 및 기능 | 예시 | 뜻 |
+ | 덧셈 | a+b | a와b를 더하기 |
- | 뺄셈 | a-b | a와b를 빼기 |
* | 곱셈 | a*b | a와b를 곱하기 |
/ | 나눗셈 | a/b | a와b를 나누기 |
% | 나머지 | a%b | a와b를 나눈 나머지 |
- | 부호변경 | -a | a의 부호변경 |
#include<stdio.h>
void main() {
printf("%d\n", 2+3); //int+int=int
printf("%f\n", 2 + 3.1); //int+float=float
printf("%c\n", 2 + '3'); //int+char=char
printf("%d\n", 2 + '3'); //int+char=int
printf("%c\n", '3' + '4'); //char+char=char
printf("%d\n", '3' + '4'); //char+char=int
printf("%f\n", '3' + 3.14); //char+float=float
printf("%f\n", 3.14 + 4.1);//float+float=float
}
결과를 보면, 정수와 문자를 더했을 때, 문자와 숫자 두 개로 결과가 나올 수 있다는 것을 확인할 수 있다. 이는 컴퓨터가 문자를 아스키코드로 저장해서 사용하기 때문에 나타나는 현상이다. 문자 '3'의 아스키코드는 51이기에, 2+51=53으로 인식되어서, 숫자 53과 아스키코드가 53인 '5'가 출력이 되는 것이다.
대입 연산자
대입연산자란 오른쪽 데이터를 왼쪽 변수에 저장하는 연산자로, 오른쪽 데이터에는 상수, 변수, 수식이 온다. 만약 값이 있는 변수에 다른 값을 저장을 할려고 하면, 대입연산자를 통해 저장을 하면 된다. 이때, 변수에 있던 값은 삭제가 된다.
연산자 | 기능 | 예시 | 뜻 |
= | 오른쪽 데이터를 왼쪽 변수에 저장 | a=1 | a에 1을 저장 |
+= | 왼쪽 변수에 오른쪽 데이터를 더한 후에 왼쪽변수에 저장 | a+=2 | a에 2를 더한 후 변수a에 저장 |
-= | 왼쪽 변수에 오른쪽 데이터를 뺀 후에 왼쪽변수에 저장 | a-=4 | a에 4를 빼서 변수a에 저장 |
*= | 왼쪽 변수에 오른쪽 데이터를 곱한 후에 왼쪽변수에 저장 | a*=7 | a에 7를 곱해서 변수a에 저장 |
/= | 왼쪽 변수에 오른쪽 데이터를 나눈 후애 왼쪽변수에 저장 | a/=3 | a에 3을 나누어서 변수a에 저장 |
%= | 왼쪽 변수에 오른쪽 데이터를 나눈 나머지를 왼쪽변수에 저장 | a%=5 | a에 5를 나눈 나머지를 변수a에 저장 |
아래의 5개의 연산자는 산술 복합대입연산자로, 산술연산자의 기능을 한 후에 저장하는 명령어라고 생각하면 된다. "a+=2"를 보면, 변수a에 2를 더한 후 변수a에 저장한다는 뜻으로, "a=a+2"와 같은 의미를 갖는다.
증감 연산자
증감연산자는 변수의 값을 1 증가하거나 감소할 때 사용하는 연산자로, 변수에 1을 더하거나 빼고 변수에 다시 저장하는 형식과 같다.(a=a+1, a=a-1)
연산자 | 기능 | 예시 | 뜻 | |
전위형 | 후위형 | |||
++ | 변수의 값을 1 증가 후, 변수에 저장 | ++a | a++ | 변수a의 저장된 값을 1 증가 후, 변수에 저장 |
-- | 변수의 값을 1 감소후, 변수에 저장 | --a | a-- | 변수a의 저장된 값을 1 감소 후, 변수에 저장 |
전위형과 후위형에 대해서 알아야 한다. 전위형은 변수의 값을 1 증가, 감소시키는 연산이 먼저 이행하는 연산자이며, 후위형은 변수의 값을 1 증가, 감소시키는 연산이 나중에 이행하는 연산자이다.
#include<stdio.h>
void main() {
int a = 10,b=10,c,d;
c = ++a;
d = b++;
printf("a=%d,b=%d,c=%d,d=%d", a, b, c, d);
}
위의 출력결과를 통해 전위형은 변수 a의 값에 1 증가시킨 후 변수a 를 저장한 다음, 변수 c에 저장했으며, 후위형은 변수 d에 먼저 저장한 후, 변수 b의 값을 1 증가 시킨 것을 확인할 수 있다.
비교 연산자(관계 연산자)
비교 연산자는 두 값의 관계가 참(1)인지 거짓(0)인지 판별하는 연산자로, 두 값의 크기를 비교하는 대소비교 연산자와 두 값이 같은지 다른지 확인하는 동등비교 연산자가 있다.
연산자 | 기능 | 예시 | 뜻 |
== | 같다 | a==b | a와b가 같으면 참 |
!= | 다르다 | a!=b | a와 b가 다르면 참 |
< | 작다 | a<b | a가 b보다 작으면 참 |
> | 크다 | a>b | a가 b보다 크면 참 |
<= | 작거나 같다 | a<=b | a가 b보다 작거나 같으면 참 |
>= | 크거나 같다 | a>=b | a가 b보다 크거나 같으면 참 |
비교 연산자를 해석할 때에는 왼쪽에 있는 데이터를 주어로, 오른쪽에 있는 데이터를 비교대상으로 하여 해석해야 한다. "a<=b"같은 경우에도, b가 a보다 크거나 같으면 참이 아닌, a가 b보다 작거나 같으면 참으로 해석해줘야 한다.
논리 연산자
논리 연산자는 연산식or 조건식 조합의 참과 거짓을 판단하는데 사용되는 연산자로, 1개의 연산식or조건식을 사용하는 단항 논리 연산자(NOT연산자)와 2개의 연산식or조건식을 사용하는 이항 논리 연산자(AND연산자, OR연산자)가 있다.
연산자 | 이름 | 예시 | 뜻 |
&& | AND | a&&b | a가 참이고 b가 참이면 결과 참 |
|| | OR | a||b | a가 참이거나 b가 참이면 결과 참 |
^ | XOR | a^b | a와 b의 논리가 다를 경우 결과 참 |
! | NOT | !a | a가 참이면 거짓, a가 거짓이면 참 |
#include<stdio.h>
void main() {
int a = 20, b ;
printf("a=%d\n", a);
b = (a>=10)&&(a<20);
printf("(a>=10)&&(a<20):%d\n",b);
b = (a>=10)||(a<20);
printf("(a>=10)||(a<20):%d\n",b);
b = !(a>=10);
printf("(!a>=10):%d\n",b);
}
변수 a의 값은 10보다 크거나 같고 20보다 작지 않다. 즉 "a>=10"는 참인 "1"이 출력되고 "a<20"는 거짓인 "0"이 출력 될 것이다. 이것을 가지고 논리 연산자를 해석하면 "1&&0"은 0, "1||0"은 1, "!1"은 0으로 출력 되는 것을 확인할 수 있다. 이때, "1"은 참을 뜻하며, "0"은 거짓을 뜻한다.
'프로그래밍 언어 > C언어' 카테고리의 다른 글
조건문(if문) (0) | 2023.02.08 |
---|---|
연산자(비트, 삼항, 기타 등등) (0) | 2023.02.07 |
기타 입출력함수 (0) | 2023.02.05 |
입력함수 scanf (0) | 2023.02.04 |
출력함수 printf (0) | 2023.02.03 |