iOS/정보처리기사

[정보처리기사] C언어 - 매크로(feat. 매크로를 적용한 비트연산문제)

Chafle 2022. 5. 26. 20:38
반응형
매크로란?

 

- 반복적인 일들을 쉽게 하기 위해 만들어 놓은 것들이다.

- 함수는 한번 호출하면 사라지지만

- 매크로는 모든 프로그램에 들어가게 할 수 있다

 

 

#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

 

[정보처리기사] C언어 - 진법전환(2진수,8진수,16진수) / 비트연산(&,|,^,<<,>>)

진법 전환을 하기 전 비트연산이 무엇이냐면 비트연산이란? 10진수를 2진수로 만든 이후에 우리가 10진수를 + - * / 하듯이 2진수를 가지고 2진수의 연산자로 연산하는 것을 뜻합니다. 10진수를 2진

accompani-i.tistory.com

 

 

#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

 

 

반응형