2.연산자
<연산자(Operator)와 피연산자(Operand)>
ex) A+B에서 ‘A’,’B’는 피연산자 ‘+’는 연산자
- 피연산자는 연산에 포함되는 ‘변수’나 ‘상수’를 의미
<대입연산자>
- '='등호 를 이용해서 우변항을 좌변항에 넣을 수 있다.->자료형에 부합하는 값을 좌변항에 있는 변수에 넣습니다.:할당
<산술연산자>
- 사칙연산(+,-,*,/)
- 나누기는 / 를 사용하는데 몫만 나온다.
- %(modular연산)는 나머지를 구할 수 있다.
(예제1) 사칙연산
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
int a, b;
scanf("%d %d", &a, &b);
printf("%d + %d = %d\n",a,b,a+b);
printf("%d - %d = %d\n",a,b,a-b);
printf("%d * %d = %d\n",a,b,a*b);
printf("%d / %d = %d\n",a,b,a/b);
printf("%d %% %d = %d\n",a,b,a%b);
system("pause");
return 0;
}
(해설) printf문에서 원하는 값이 3개니까 당연히 변수도 3개 들어가야한다.
<이스케이프 시퀀스(Escape Sequence)>
- 특정한 표현을 출력하기 위해 사용하는 문법
□ \n: 줄바꾸기
□ \t: 수평 탭 넣기
□ \\: 백슬래쉬 넣기
□ \": 큰따옴표 넣기
□ \b: 백스페이스 넣기
(예제2)이스케이프 시퀀스
#include <stdio.h>
int main(void) {
printf("\"A\tB\tC\tD\"\n");
printf("\"A\tB\tC\tD\"\n");
printf("\"A\tB\tC\tD\"\n");
system("pause");
return 0;
}
(해설) 출력하면 “A B C D” 가 나온다. 갑자기 생각나서 넣는건데 코딩 짤 때 복사 붙여넣기 하고 싶으면 그냥 드래그 안하고 마우스커서가 있는 줄에서 ctrl+c누르면 다음줄에 ctrl+v누르면 된다.
그리고 system(“pause”); 나 return 0; 안써도 값은 나온다.
\\은 백슬래쉬, \”은 큰따옴표를 출력해준다.
왜 줄바꾸기 \n을 이 문제 뿐만 아니라 다 넣어줬을까? ▶관례라고 생각해라. \n을 해야 보기 편함.
<관계 연산자>
- 컴퓨터는 0을 거짓(False)로, 그 외 어떠한 숫자도 다 참(True)로 받아들임.
- 단,컴퓨터가 거짓(False)를 출력할 때는 0을, 참(True)를 출력할 때는 1을 출력
「 > : 크다
< : 작다
==: 같다
!=: 다르다(!는 not을 뜻한다)
>=: 크거나 같다(부등호 먼저)
<=: 작거나 같다(부등호 먼저) 」
(예제3)관계 연산자
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
int a, b;
scanf("%d %d",&a,&b);
printf("%d\n",a>b);
system("pause");
return 0;
}
(해설) 차례로 넣은 값 중에 앞에 값(a)가 뒤에 값(b)보다 크면 참이므로 1이 출력되고
(%d라고 했으니까 당연히 숫자가 나온다.), 그 반대이거나 값이 같으면 거짓이므로 0이 출력된다.
<논리 연산자>
!: 부정(not)= True<->False
&& : 그리고(and)-둘다 참이어야지 참
||: 또는(or)- 둘 중 하나라도 참값을 가지면 참(둘다 거짓일 때만 거짓)
(예제4)논리 연산자
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
int a, b,c;
scanf("%d %d %d",&a,&b,&c);
printf("%d\n",!a);
printf("%d\n", a&&b);
printf("%d\n", (a>b)&&(b>c));
system("pause");
return 0;
}
(해설) 역시나 결과값이나 입력값이나 숫자다. (%d)
첫번째 printf문에서는 a가 참이면 그 반대인 0, a 가 거짓(0)이면 그 반대인 1이 나온다.
두번째 printf에서는 a와 b 둘다 참인지 거짓 인지에 따라 참이 나오고 거짓이 나온다.(0,1)
세번째 printf에서는 a>b도 만족해야 하고 b>c도 만족해야 한다.여기서 궁금할 수 도 있다.
왜 a>b>c 라고 표현을 안하고 굳이 저렇게 표현 하나? 라고 말이다. a>b>c로 써버리면 컴퓨터는 앞에서부터 내용을 읽기 때문에 예를 들어 a>b가 참이면 1, 그럼 1>c 를 해석해버리기 때문에 마땅치 않다. 그래서 a>b이고 b>c를 만족하는 표현식은 위처럼 해야 하는게 옳다.
<증감 연산자>
- 특정한 변수의 값을 1만큼 증가/감소시키는 연산자
++(변수): i의 값을 1증가시킨 후, 증가된 값을 반환 ex) ++5▶6
(변수)++: i의 값을 1증가시킨 후, 증가되기 전의 값을 반환 ex) 5++ ▶ 5
--(변수): i의 값을 1감소시킨 후, 감소된 값을 반환 ex) --5 ▶4
(변수)--: i의 값을 1감소시킨 후, 감소되기전의 값을 반환 ex) 5-- ▶5
앞에 붙어있는 연산자들을 “먼저 이 값을 수행하겠다”고 받아들이면 암기하기 쉽겠쥬?
(예제5)증감 연산자
#include <stdio.h>
int main(void) {
int a=7;
printf("%d\n",++a);
printf("%d\n", a++);
printf("%d\n", ++a);
printf("%d\n", --a);
system("pause");
return 0;
}
(해설) a에 7이 할당 되었으므로,
맨 처음 printf문에서는 8이 출력(먼저 계산->계산값 출력),
두번째 printf문에서는 8에서 9가 되었지만 계산 이전값인 8이 그대로 출력,
세번째 printf문에서는 9로 변한 값이 또 1이 증가되어 10이 출력,
마지막 printf문에서는 1이 감소 된 9가 출력된다.
(8,8,10,9)
<삼항 연산자>
- 세 개의 항을 이용해서 조건문을 수행할 수 있는 연산자
- ((a비교b) ? 맞으면 : 틀리면) (?를 기준으로 괄호안의 값이 맞으면 왼쪽, 틀리면 오른쪽 값이 출력)
(예제6)삼항 연산자
#include <stdio.h>
int main(void) {
int a = 7, b = 7;
printf("%d\n",(a==b)?100:-100);
printf("%d\n",(a>b)?14:-14);
printf("%s\n",(a==b)?"맞습니다":"아닙니다");
printf("%s\n",(a++>b)?"Correct":"Wrong");
system("pause");
return 0;
(해설) a와 b에 각각 7이 할당 되었는데,
첫번째 printf문에서는 (a==b)가 맞으므로 100이 왼쪽 값인 100이 출력되고,
두번째 printf문에서는 (a>b)가 아니므로 오른쪽 값인 -14가 출력된다.
세번째 printf문에서는 (a==b)가 맞으므로 왼쪽값인 “맞습니다”가 출력되는데, 여기서 주의해야 할 점은 문자열이 출력 되므로 앞에”%d\n” 대신 “%s\n”으로 바꿔줘야 한다는 것이다.
마지막 printf문에서는 기존 a에 1이 더해진 값을 비교하므로 a는 8이되는데 주어진 조건은 맞으므로 왼쪽 값인 “Correct”가 출력된다.
<비트연산자>
-"비트" 단위의 연산을 수행할 때 사용할 수 있다.
~: 부정 ex) ~(11000011) = (00111100)
(비트이진수가 뒤집힌다(=not))
&: 그리고 ex)(00001101)&(00000011) = (00000001)
▶ &&와는 다르다! 왼쪽값 자리수와 오른쪽 값 자리수를 비교해서 “둘다 1인 자리”만 “1”
|: 또는 ex)(11001100) | (00110000) = (11111100)
▶ 각각의 비트 단위를 비교해서 “둘중의 한 개라도 1”의 값을 가지면 “1”이다.
^: 배타적 ex)(11001111) ^ (00000011) = (11001100)
▶ 둘 중에 “한개만 1”일때 “1” = “두개의 값 중에 하나만 1”일 때 “1”이다.
<<: 왼쪽 시프트 ex)(00001111) << 3 = (01111000)
>>: 오른쪽 시프트 ex)(11110000) >> 3 = (00011110)
쉽게 말해!
(<<는 왼쪽 값을 2의 n승을 곱한거와 같고 >>는 왼쪽값을 2의 n 승을 나눈거와 같다)
==(<<는 비트를 그대로 왼쪽으로 옮겨주고 >>는 오른쪽으로 옮겨주면 된다.)
ex) 9<<1 :18 32>>5 : 1
(정리)
<연산자 우선순위>
1. ++, --(증감연산자)
2. !,~(not연산)
3. *,/,%(곱하기 나누기)
4. +,-(덧셈,뺄셈)
5. <<, >>(쉬프트 연산)
6. < , <=, >, >=
7. == , !=
8. 비트연산자, 논리연산자, 삼항 연산자
9. 삼항 연산자
'컴퓨터 공부 > © C' 카테고리의 다른 글
[C언어] 6. 배열 (0) | 2021.01.28 |
---|---|
[C언어] 5. 함수 (0) | 2021.01.27 |
[C언어] 4. 반복문 (0) | 2021.01.27 |
[C언어] 3. 조건문 (0) | 2021.01.27 |
[C언어] 1. 기본 입출력 (0) | 2021.01.27 |