정보처리기사/[흥달쌤] 실기_깨알 C언어

C언어 특강 / 10. 출력형식, 11. 진법변환, 비트연산, 12. 매크로, 비트연산

web_seul 2022. 5. 3. 18:10
반응형

10. 출력형식

* 출력변환기호

기호 의미 데이터 타입
%d 부호있는 10진수 출력 정수, 문자
%f 고정 소수점으로 출력 정수, 실수
%c 문자 출력 문자
%s 문자열 출력 문자열 포인터
%x 16진수 출력 정수
%o 8진수 출력 정수
printf("값1: %d, 값2: %d", 10, 5); //값1: 10, 값2: 5
printf("값: %c", 65);	//값: A (아스키코드 65는 A표현)
printf("값: %c", A);		//값: A
printf("값: %s", "안녕하세요.");	//값: 안녕하세요.
printf("값: %x", 34);	//값: 100010(2진수), 값: 22(16진수, 4자리씩 끊음)
printf("값: %o", 34);	//값: 42(8진수, 3자리씩 끊음)

* 정수형 자리수 지정

printf("값: %d", 13);	//13
printf("값: %5d", 13);	//_ _ _13
printf("값: %05d", 13);	//00013

* 실수형 자리수 지정

printf("값: %f", 3.26);		//3.260000(소수점아래 6자리까지)
printf("값: %6.1f", 3.3);	//_ _ _ 3.3(6개의 공간, 소수점아래 1자리까지)
printf("값: %-6.1f", 3.26);	//3.3(6개의 공간, 왼쪽부터 소수점아래 1자리까지, 반올림)
printf("값: %-6.3f", 3.26);	//3.260(6개의 공간, 왼쪽부터 소수점아래 3자리까지)

 

문) 다음 C프로그램의 실행결과는?

#include<stdio.h>
void main(){
  double d_value;
  float f_value = 5.65;	//f_value = 5.65
  int n;
  d_value = f_value;	//f_value = d_value = 5.65
  d_value = d_value + 0.5;	//d_value = 6.15
  n = (int)d_value;	//n = 6
  printf("%3.1f, %d", d_value, n);	//6.2, 6
}

 

11. 진법변환, 비트연산

* 진법변환

- 10진수 -> 2진수 (ex. 19 ->10011)

  19 C
2 9 1
2 4 1
2 2 0
2 1 0

- 2진수 -> 8진수 (ex. 10011 -> 23)

- 2진수 -> 16진수 (ex. 10011 -> 13)

* 비트연산자 종류

기호 의미  
& 비트 논리곱(AND) 5&3 0101 / 0011 중 모두 1인 것 0001 = 1
| 비트 논리합(OR) 5|3 0101 / 0011 중 둘중하나 1인 것 0111 = 7
^ 비트 배타적 논리합(XOR) 5^3 0101 / 0011 중 하나만 1인 것 0110 = 6
~ 비트 NOT ~5  
>> 비트값을 우측으로 이동 5>>3  
<< 비트값을 좌측으로 이동 5<<3  

 

문) 다음 C프로그램의 실행결과는?

#include<stdio.h>
void main(){
  int x = 0x11;	//16진수, 0001 0001 = 17
  int y,z;
  y = x & 0x0f;	//0001 0001 & 0000 1111 = 0000 0001 = 1
  z = x | 0x0f;	//0001 0001 | 0000 1111 = 0001 1111 = 31
  printf("x=%d, y=%d, z=%d", x, y, z);	//17, 1, 31
}

 

12. 매크로, 비트연산

* 매크로란? 반복적인 일들을 쉽게 하기 위해 만들어 놓은 것

#define N 10 : N은 모두 10으로 대체함을 선언

#define SQR(X) X*X : SQR(X)은 X*X로 연산함을 선언

#define N 10
#define SQR(x) X*X

SQR(N);	//100
SQR(N+2); //10 + 2*10 + 2 = 32

* 시프트연산(>>)

- 10 >> 2 = 2

- 10 << 2 = 40

 

문) C프로그램의 실행결과로 옳은 것은?

#define VALUE1 1	//모든 VALUE1 은 1
#define VALUE2 2	//모든 VALUE2 은 2
main(){
  float i;		//실수
  int j, k, m;
  i = 100/300;	//100/300 = 0.33..이나 정수/정수는 정수로 표현 0 
  		//-> i는 실수인 float므로 0.0;
  j = VALUE1 & VALUE2;		//01 & 10 = 00 = 0;
  k = VALUE1 | VALUE2;		//01 | 10 = 11 = 3;
  if(j && k || i) m = i + j;	//0(F) && 3(T) || 0(F) = F
  else m = j + k;		//0 + 3 = 3;
  printf("i = %.1f j = %d k = %d m=%03d\n", i, j, k, m);	//i = 0.0, j = 0, k = 3, m = 003
}

 

반응형