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
}
반응형