[C++] scanf() 함수
scanf() 함수, 진법 변환, 산술연산자와 변수 메모리 이해
\ \\C언어에서 입력 함수 scanf의 원리와 사용법, 2진수·8진수·10진수·16진수 등 다양한 진법 변환 방법, 산술 연산자(+ - * / %), 그리고 변수와 메모리의 관계를 집중적으로 다룬다. 각 개념을 실제 코드와 예시, 그리고 메모리와 데이터 흐름 관점에서 쉽게 설명한다.
1. 진법 변환의 원리와 방법
- 컴퓨터는 2진수(0, 1)로 데이터를 처리하지만, 사람이 보기 쉽도록 8진수, 10진수, 16진수로도 표현한다.
- 10진수를 2진수로 변환할 때는 정수는 2로 나누기, 소수는 2를 곱하기 방법을 쓴다.
- 2진수와 8진수, 16진수는 각각 3자리, 4자리씩 묶어서 변환할 수 있다.
| 진법 | 범위 | 변환 특징 | C언어 서식문자 |
|---|---|---|---|
| 2진수 | 0, 1 | 컴퓨터 내부 데이터 표현 | - |
| 8진수 | 0~7 | 2진수 3자리씩 묶음 | %o (소문자 o) |
| 10진수 | 0~9 | 사람이 주로 사용하는 진법 | %d |
| 16진수 | 0~9, A~F | 2진수 4자리씩 묶음, 10~15는 A~F로 표기 | %x, %X |
- 8진수는 %o, 16진수는 %x(소문자), %X(대문자)로 출력한다. 대문자 O는 사용하지 않는다.
- 16진수 리터럴은 0xA4D처럼 0x를 앞에 붙인다.
2. scanf 함수와 입력 처리
- scanf 함수는 키보드로부터 데이터를 입력받아 변수에 저장한다.
- 입력받을 변수 앞에는 &(주소 연산자)를 반드시 붙여야 한다. 예: scanf("%d", &n);
- 입력받은 값은 변수의 메모리 공간에 저장된다.
int n;
printf("숫자를 입력하세요.\n");
scanf("%d", &n);
printf("입력한 숫자는 '%d'입니다.\n", n);
- 주소(&n)와 값(n)의 차이를 이해해야 한다. &n은 변수의 메모리 주소, n은 변수에 저장된 값이다.
- 주소를 %x, %X로 출력하면 변수의 실제 메모리 주소가 16진수로 출력된다.
3. 산술 연산자와 변수 연산
- 산술 연산자는 +, -, *, /, % 등이 있다.
- 정수형 변수끼리 나눗셈(/)을 하면 몫만 출력되고, 실수 결과를 원하면 double형으로 변환해야 한다.
- % 연산자는 나머지를 구하는 연산자다.
- a += b, a -= b, a *= b, a /= b 등 복합 대입 연산자도 자주 사용된다.
- 증감 연산자 ++a, a++는 위치에 따라 동작 시점이 다르다(전위/후위).
| 연산자 | 설명 | 예시 | 결과 |
|---|---|---|---|
| + | 덧셈 | a+b | 13 (a=10, b=3) |
| - | 뺄셈 | a-b | 7 |
| * | 곱셈 | a*b | 30 |
| / | 나눗셈(몫) | a/b | 3 (정수 나눗셈) |
| % | 나머지 | a%b | 1 |
- 실수 결과가 필요하면 double형 변수를 사용하고, 나눗셈 연산도 double로 해야 한다.
- printf에서 %5.2f처럼 소수점 이하 자리수와 전체 자리수를 지정할 수 있다.
4. 변수, 메모리, 주소의 관계
- 변수 선언은 메모리 공간을 확보하는 과정이다.
- 변수의 값은 메모리 주소에 저장되고, &변수명은 그 주소를 의미한다.
- 입력, 출력, 연산 등 모든 과정에서 변수와 메모리, 주소의 관계를 명확히 이해하는 것이 중요하다.
5. 주요 용어 정리
- scanf: 키보드 입력 함수, &변수명으로 주소를 전달
- 진법 변환: 2, 8, 10, 16진수 상호 변환
- 산술 연산자: +, -, *, /, % 등 기본 연산자
- 복합 대입 연산자: +=, -=, *=, /= 등
- 증감 연산자: ++, -- (전위/후위)
- 메모리 주소: 변수의 실제 저장 위치, &로 참조
정리
scanf 함수와 진법 변환, 산술 연산자, 변수와 메모리의 원리를 익히면 C언어에서 입력/출력/연산/저장 등 프로그램의 기본 흐름을 정확히 이해할 수 있다. 각 연산자와 서식문자, 주소와 값의 차이, 진법 변환 원리를 반복 실습하며 자연스럽게 익혀두는 것이 중요하다.
728x90
'C++' 카테고리의 다른 글
| [C++] printf() 함수 (0) | 2025.05.02 |
|---|---|
| C++의 프로그램 구조 (0) | 2025.05.01 |