본문으로 건너뛰기

scanf() 함수와 산술연산자

10진수, 2진수 변환

  1. 방법 1

    정수 부분 : 2로 나누어 더 이상 나눠지지 않을 때까지 나누고, 나머지를 역순으로 표시함 소수 부분 : 2를 곱한 결과의 정수 부분만을 차례로 표시함

    10 진수 21.6을 2진수로 변환하는 것은? 10101.1001

  2. 방법 2 : 2진수의 자리 값에서 가장 큰 값을 뺌

10 진수 156을 2진수로 변환 시

1286432168421
10011100
  1. 156 - 128 = 28
  2. 28 - 16 = 12
  3. 12 - 8 = 4
  4. 4 - 4 = 0
  1. 방법 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 입니다.
  1. int(정수) 타입으로 score 변수라는 메모리 공간을 차지
  2. printf 함수로 문자열 출력
  3. scanf 함수로 10진수(%d)를 키보드로 부터 데이터 입력 받고,
    입력받은 데이터를 변수 score 메모리주소(&score)에 할당
  4. 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

증가 연산자(++)

  1. 선 증가 (++변수);
#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
  1. 후 증가 (변수++)
#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