scanf() 함수와 산술연산자
10진수, 2진수 변환
-
방법 1
정수 부분 : 2로 나누어 더 이상 나눠지지 않을 때까지 나누고, 나머지를 역순으로 표시함 소수 부분 : 2를 곱한 결과의 정수 부분만을 차례로 표시함
10 진수 21.6을 2진수로 변환하는 것은? 10101.1001
-
방법 2 : 2진수의 자리 값에서 가장 큰 값을 뺌
10 진수 156을 2진수로 변환 시
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|---|---|
| 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
- 156 - 128 = 28
- 28 - 16 = 12
- 12 - 8 = 4
- 4 - 4 = 0
- 방법 3 : C언어를 이용한 2진수 변환
#include <stdio.h>
int main(void){
print("%o \n", 156);
}
결과 : 234 %o는 8진수로 출력하는 서식 문자임
- 156은 8진수로 234
- 2를 3자리 2진수로 변환 : 010
- 3을 3자리 2진수로 변환 : 011
- 4를 3자리 2진수로 변환 : 100
2진수, 8진수, 16진수 상호 변환
| 10진수 | 8진수 | 16진수 |
|---|---|---|
| 0부터 9까지 사용 | 0부터 7까지 사용 | 0부터 15까지 사용 |
- 16진수 : 9이상의 숫자가 없기 때문에
10을 A,
11을 B,
12를 C, 13을 D, 14를 E, 15를 F 로 표시함
16진수 A4D르르 8진수로 변환
- 16진수 A4D는 2진수로 1010 0100 1101
- 8진수로 변환하려면 아래 자리부터 3자리씩 변환하면 5115가 됨
16진수 : A 4 D 2진수 : 1010 0100 1101 8진수 : 101 001 001 101 => 5 1 1 5
#include <stdio.h>
int main(void){
printf("%o \n", 0xA4D);
}
-
%o : 8진수로 출력하는 서식 문자
-
%x : 16진수 소문자로 출력하는 서식문자
-
%X : 16진수 대문자로 출력하는 서식문자
-
%d : 10진수 정수로 출력하는 서식문자
-
0x : 16진수를 의미함
-
0b : 2진수를 의미함
-
0 : 8진수를 의미함
#include <stdio.h>
int main(void){
printf("%X %x\n", 235, 235);
}
실행 결과
EB eb
#include <stdio.h>
int main(void){
printf("%X\n", 23);
printf("%o\n", 23);
printf("%d\n", 0b00010111);
printf("%d\n", 0x23);
printf("%x\n", 0b11110111);
}
scanf( ) 함수
키보드로 부터 데이터를 입력 받음
#include <stdio.h>
int main(void){
int score;
printf("점수를 입력하세요. \n");
scanf("%d", %score);
printf("당신의 점수는 %d 입니다. \n", score);
}
실행 결과
점수를 입력하세요.
90
당신의 점수는 90 입니다.
- int(정수) 타입으로 score 변수라는 메모리 공간을 차지
- printf 함수로 문자열 출력
- scanf 함수로 10진수(%d)를 키보드로 부터 데이터 입력 받고,
입력받은 데이터를 변수 score 메모리주소(&score)에 할당 - printf 함수로 문자열 출력 + score 데이터 출력
int score; :
메모리에 변수 score가 정수를 저장할 공간을 확보
주소는 임의로 컴퓨터가 확보
아직 데이터는 저장되지 않음
& : 주소 연산자
&score : score의 주소를 의미함
scanf(" %d", &score); : 키보드로부터 정수 데이터를 입력 받아 변수 score에 저장하는 명령 (50의 2진수인 00110010으로 변환하여 저장)
산술 연산자
#include <stdio.h>
int main(void){
int a = 10, b = 3;
printf("%d\n", a+b);
printf("%d\n", a-b);
printf("%d\n", a*b);
printf("%d\n", (a/b))
printf("%d\n", a%b);
}
실행 결과
13
7
30
3
1
/ 연산 : 정수인 경우 몫을 계산 % 연산 : 정수인 경우 나머지를 계산
실수 의 계산
#include <stdio.h>
int main(void){
float a = 10.0, b = 3.0;
printf("%f\n", a/b);
}
실행 결과
3.333333
대입 연산자(=)
#include <stdio.h>
int main(void){
int a = 10, b = 5;
a = b;
printf("a = %d\n", a);
printf("b = %d\n", b);
}
실행 결과
a = 5
b = 5
대입 연산자(+=)
#include <stdio.h>
int main(void){
int a = 10, b = 5;
a += b;
printf("a = %d\n", a);
printf("b = %d\n", b);
}
실행 결과
a = 15
b = 5
증가 연산자(++)
- 선 증가 (++변수);
#include <stdio.h>
int main(void){
int a = 10, r = 0;
r = ++a;
printf("a = %d\n", a);
printf("b = %d\n", r);
}
실행 결과
a = 11
r = 11
- 후 증가 (변수++)
#include <stdio.h>
int main(void){
int a = 10, r = 0;
r = a++;
printf("a = %d\n", a);
printf("b = %d\n", r);
}
실행 결과
a = 11
r = 10
문자 자료형 사용하기
정수 자료형 char
char는 문자 한 개를 저장함
char, signed char ( 부호가 있음 )
크기: 1바이트
범위: -128 ~ 127
문자 저장
unsigned char ( 부호가 없음 )
크기: 1바이트
범위: 0 ~ 255
바이트 단위 데 이터 저장
- char에 문자를 저장할 때 문자자체를 저장하는 것이 아닌, 문자에 해당하는 정숫값을 저장
- 이 규칙을 아스키(ASCII) 코드라고 함
작은 따옴표 ('a') : 문자 하나만 묶을 수 있음
#include <stdio.h>
int main(void){
char alphabet = 'a';
printf("%d\n", a);
printf("%c\n", a);
}
실행 결과
97
a
문자 0과 숫자 0의 차이
#include <stdio.h>
int main(void){
char alphabet1 = '0';
char alphabet2 = 0;
printf("%d %c\n", alphabet1, alphabet1);
printf("%d %c\n", alphabet2, alphabet2);
}
실행 결과
48 0
0
문자로 연산하기
#include <stdio.h>
int main(void){
char alphabet = 'a';
printf("%d %c\n", alphabet, alphabet + 3);
}
실행 결과
97 d
제어 문자 사용하기
#include <stdio.h>
int main(void){
char char1 = 'a';
char char2 = '\t';
char char3 = 'A';
char char4 = '\n';
char char5 = 'N';
printf("%c%c%c%c%c\n", char1, char2, char3, char4, char5);
}
실행 결과
H A
N
숫자 문자 사용하기
#include <stdio.h>
int main(void){
char num1 = 5;
printf("%c%c%c \n", numb1 + '0', '\t', num1 + 48);
}
실행 결과
5 5