학습 목표
- 2진수 8진수 16진수 10진수를 상호 변환할 수 있다.
- scanf() 함수를 사용하여 입력받을 수 있다.
- ++a 와 a++의 차이에 대해 설명할 수 있다.
학습 내용
10진수, 2진수 변환
숫자 21.6을 2진법으로 변환해보자
결과는 10101.1001…이다
10진수 156을 2진수로 변환하면 010011100
8진수는 거의 사용되지 않지만 해당 방법으로 2진수로 표현하는 방법도 있다는것을 알아두자.
10진수 : 0부터 9까지 사용
8진수 : 0부터 7까지 사용
16진수 : 0부터 15까지 사용. 9 이상 숫자가 없기 때문에 10부터 15까지 알파벳으로 표기
2진수는 소수점을 기준으로
8진수는 3자리씩 변환
16진수는 4자리씩 변환 ★
10진수, 2진수, 8진수, 16진수 비교

2진수와 16진수를 잘 비교해보면 일정 패턴을 찾아볼 수 있다. ex) 1111 = F
scanf( ) 함수
scanf( ) 함수는 키보드로부터 데이터를 입력받는 함수다.

해당 코드를 실행시킬 시 “점수를 입력하세요.” 라는 문구가 출력되고 뒤이어 점수를 입력할 수 있다.
입력된 결과는 int n에 저장된다. 해당 코드를 실행하면

이런 결과가 나오게 된다.
여기서 n의 주소를 출력하려면 16진수로 출력이 가능하다.


산술 연산자
산술 연산자의 사용은 다음과 같다

몫 계산은 int인 경우에 해당된다.
소수까지 출력하고 싶다면 int형이 아닌 double 형을 사용하면 된다.


++a와 a++의 차이
++a는 먼저 해당 변수를 증가시킨 뒤 다음 명령을 수행한다.


a++ 같은 경우에는 해당 동작과 반대로 먼저 명령을 수행한 뒤 a의 값을 1 증가시켜준다.


데이터의 표현 방법
고정 소수점 표현은 정밀도가 낮은 정수 표현형식이며, 구조가 단순하지만 표현 범위가 좁아 연산 속도는 빠르다. 부호화 절대치 방법, 1의 보수방법, 부호화 2의 보수방법이 있음
부호화 절대치 방법
1의 보수 방법
음수를 표시하기 위해 몸든 비트의 0과 1을 바꾸는 방법
부호화 2의 보수 방법
부동 소수점 표현
부호부, 지수부, 가수부로 구성
소수점이 포함된 실수 표현 형식
매우 큰 수나 작은 수를 표현할 수 있음
컴퓨터 내부에서 처리하는 데 시간이 많이 소요됨

정수와 실수의 저장 방식은 완전히 다르다.
실수는 1.xxxxx의 2^n 으로 표현
정수는 2의 보수 방식으로 표현함
주의사항
signed char, unsigned char의 특성을 알아보고 little endian, big endian의 특성을 이해해야 한다.
signed char
와 unsigned char
는 C 언어에서 사용되는 두 가지 문자형 데이터 타입입니다. 이들은 기본적으로 부호 있는 문자(signed char
)와 부호 없는 문자(unsigned char
)를 나타냅니다.
signed char
:- 범위: -128부터 127까지의 정수 값을 표현할 수 있습니다.
- 크기: 보통 1바이트를 차지합니다.
- 부호: 부호 있는 값을 나타냅니다. 즉, 양수, 음수, 0의 범위를 가집니다.
- 예시:
signed char num = -50;
unsigned char
:- 범위: 0부터 255까지의 정수 값을 표현할 수 있습니다.
- 크기: 보통 1바이트를 차지합니다.
- 부호: 부호 없는 값을 나타냅니다. 즉, 양수 또는 0의 범위를 가집니다.
- 예시:
unsigned char num = 100;
이 두 타입의 차이점은 주로 부호 여부에 있습니다. signed char
는 양수, 음수, 0을 표현할 수 있지만 unsigned char
는 양수와 0만 표현할 수 있습니다. 이에 따라 범위도 달라집니다. signed char
는 -128부터 127까지의 범위를 가지며, unsigned char
는 0부터 255까지의 범위를 가집니다.
부호 여부와 범위 이외에는 두 타입이 동일한 크기를 가지며, 메모리 상에서 1바이트를 차지한다는 점에서도 유사합니다.
C를 사용하며 음수를 unsigned char로 선언해버려 연산시 오류가 발생하는 경우가 종종 있다. 이를 유의하여 코딩하도록 하자.
포인터의 정의
scanf 함수의 포인터를 보고 이해하기 위해 추가적으로 학습하였다.
예를들어 int n 정수를 선언하는 순간 a에는 주소(&) 와 값(*) 이 들어간다.
두개의 값은 별개로 우리가 궁금한 내용은 주로 값(*) 에 들어가있다. 하지만 주소를 어떻게 사용하는지 알아야한다.
예를들어 우린 int n 의 값에 사용자의 입력값을 추가해주고 싶어 scanf 함수를 사용 할 것이다.
해당 코드를 보면 scanf 함수로 입력받은 수 %d를 n의 주소가 (&n) 가지고 있는 값에 대입해주는 것이다.

별개로 주소의 값을 확인하고 싶다면 %p로 확인할 수 있다.

부동 소수점 표현에 대해 좀 더 이해가 필요할 것 같다.
'코딩딩 > C' 카테고리의 다른 글
서식 문자, 자리 이동 연산자, 관계 연산자 (0) | 2023.06.28 |
---|---|
서식문자, 변수와 메모리 (0) | 2023.06.23 |