매크로란?
- 반복적인 일들을 쉽게 하기 위해 만들어 놓은 것들이다.
- 함수는 한번 호출하면 사라지지만
- 매크로는 모든 프로그램에 들어가게 할 수 있다
#define N 10
-> 앞으로 나오는 모든 N은 10으로 대체한다
#define SQR(X) X*X
-> X의 인자를 받으면 X*X를 수행할 거야(함수처럼 만들어 놓은 매크로)
ex.
#define N 10
#define SQR(X) X*X
SQR(N);
SQR(N+2);
해설
SQR(N); -> 10*10 인 100출력
주의!!!1
SQR(N+2); -> 12*12인 144출력이 아니고!!!!!!!!!!!!!!!!!!!!!!!
N+2가 아래 형태와같이 그대로 넘어간다
10 + 2 * 10 + 2
연산자 우선순위에 의해서 2*10이 먼저 계산 되고
10 + 20 + 2인 32가 출력된다
실전 문제
실전문제 풀기 전
비트 연산 모르 시는 분은 미리 학습 하고 오시기 바랍니다.
https://accompani-i.tistory.com/190
#define VALUE1 1
#define VALUE2 2
main() {
float i;
int j, k, m;
i = 100/300;
j = VALUE1 & VALUE2;
k = VALUE1 | VALUE2;
if(j &&k || i) m = i + j;
else m = j + k;
printf("i = %.1f j = %d k = %03d₩n", i, j, k,m)
}
해설
VALUE1 = 1 -> 2진수 변환 하면 0001
VALUE2 =2 -> 2진수 변환하면 0010
i | j | k | j && k || i | m | |
100/300 | 0.0 [정수/정수 = 정수인데 실수로 표기니까 0.0] |
||||
VALUE1 & VALUE2 | 0 [0001 & 0010 = 0000] |
||||
VALUE1 | VALUE2 | 3 [0001 | 0010 = 0011] |
||||
if문 j && k || i |
0 && 3 || 0.0 [0은 거짓 나머지는 참이므로 0 && 3 = 0 이고 0 || 0.0 = 0 둘중 하나라도 참이면 참인데 둘 다 거짓인 0이므로 0이다 = 거짓이다 if문을 수행 안하고 else문을 탄다] |
||||
else문 m = j + k |
0 | 3 | 3 |
if문 해설
if(j &&k || i) m = i + j;
j && k || i가 참이라면 m = i+j
순차적으로 j&&k
0 && 3 || 0.0
0은 거짓이고 3은 참이므로
0 && 3 (AND연산 - 둘 다 참이여야 참, 하나라도 거짓이면 거짓) = 0(거짓) 이고
0 || i
0 || 0.0 = 0
(OR연산 - 둘 중 하나라도 참이면 참인데 둘 다 거짓인 0이므로 0이다 = 거짓이다
->> 결론 if문을 수행 안하고 else문을 탄다
else문 해설
else m = j + k;
j = 0
k = 3
m = 3
printf("i = %.1f j = %d k = %d m = 03d₩n", i, j, k,m)
%.1f. -> 소수점 한 자리까지 나온게 해라
%d -> 정수
%03d -> 공간을 세 개 만들어 놓고 우측부터 찍는데 빈공간은 0으로 채워라
m은 3이므로 OOO에
003을 넣는다.
i = 0.0
j = 0
k = 3
m = 003
'iOS > 정보처리기사' 카테고리의 다른 글
[정보처리기사] C언어 - 제어문(if문, switch문) (0) | 2022.05.27 |
---|---|
[정보처리기사] C언어 - 삼항연산자(조건연산자) 사용법 (0) | 2022.05.27 |
[정보처리기사] C언어 - 진법전환(2진수,8진수,16진수) / 비트연산(&,|,^,<<,>>) (0) | 2022.05.26 |
[정보처리기사] C언어 - 출력 변환 기호(%d, %f, %c, %s, %x, %o, 16진수, 8진수 변환) (0) | 2022.05.24 |
[정보처리기사] C언어 - 관계연산자/논리연산자, 조건문 (0) | 2022.05.23 |