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);
}