반응형
오늘 공부한 내용📓
- C++
개념 공부
고정소수점
- 정수를 표현하는 비트 수와 소수를 표현하는 비트 수를 미리 정해두고, 해당 비트만 사용하여 숫자를 표현하는 방식
- 한정된 비트에 정수와 소수를 표현해야하기 때문에, 나타낼 수 있는 범위가 한정적인 문제
- 아래 처럼 32비트를 쪼개 실수를 표현
- [ 1 ][ 15 ][ 16 ]
- [sign][integer part][fractional part]
- 처음 1 비트는 sign(부호) 이며, 양수는 0 음수는 1
- 다음 15 비트를 integer(정수부)
- 다음 15 비트를 fractional(소수부)
- 정수부에 정수값을 2진수로 바꾸어 넣고, 소수부에 소수값을 2진수로 바꾸어 넣은 후, 남은 자리는 0으로 채움
부동소수점
- 소수점의 위치를 고정하지 않고, 그 위치를 나타내는 수를 따로 적는 방식으로, 유효숫자를 나타내는 가수와 소수점의 위치를 나타내는 지수로 나누어 표현함
- 부동소수점은 다양한 방식이 있고, 일반적으로는 IEEE754 를 표준으로 함
- 실수 연산이 부정확할 수 있다는 단점이 있음
ex02 구현
- subject 에서 요구하는 내용은 단순히 소수부를 8 비트로 사용하여, int 변수에 fixed-point 값을 저장하라고 한다.
- 그래서 아래처럼 단순하게 비트를 구성하는 것으로 이해하고 진행했다.
- [ 24 ][ 8 ]
- [ 정수부 ][ 소수부 ]
- 기본적인 개념으로는, 만약 10.01 이라는 2진수를 비트에 넣어야 한다면, 비트연산을 통해 8 만큼을 왼쪽으로 밀어줘야 한다. (그래야 정수부에 10이, 소수부에 01이 들어가기 때문)
- [000000000000000000000010][01000000]
- 값을 받아 저장하는 프로세스는 다음과 같다.
- 받아온 10진수 값에 8비트를 왼쪽으로 밀어준다( = 256을 곱한다 )
- 만약 소수값이라면 int에 저장할 수 없기 때문에, roundf 를 사용하여 반올림한 후 저장한다.
- ex
- 값이 10인 경우
- 10 에 256 을 곱한 2560이 int 변수에 저장됨
- 값이 10.01인 경우
- 10.01 에 256 을 곱한 2562.56 을 roundf 로 소숫점을 반올림하여, 2563이 int 변수에 저장됨
- 값이 10인 경우
- 저장한 값을 출력하는 프로세스는 다음과 같다.
- int 변수에 저장된 값에 8비트를 오른쪽으로 밀어준다( = 256을 나눈다 )
- ex
- 값이 10인 경우
- 저장된 2560 에서 256을 나눈 후 10을 출력함
- 값이 10.01인 경우
- 저장된 2563 에서 256을 나눈 후 10.0117을 출력함 (정확한 원래 값으로의 출력은 할 수 없다)
- 값이 10인 경우
- ex
- int 변수에 저장된 값에 8비트를 오른쪽으로 밀어준다( = 256을 나눈다 )
제가 공부한 내용을 기록하고 있습니다.
혹시 수정이 필요한 부분이 있다면, 댓글로 지적 부탁드립니다!
선한 관심과 도움 감사드립니다😊
반응형
'TIL::Today I Learn' 카테고리의 다른 글
[TIL] 20230718 (0) | 2023.07.28 |
---|---|
[TIL] 2023714 (1) | 2023.07.18 |
[TIL] 20230707 (0) | 2023.07.08 |
[TIL] 20230705 (0) | 2023.07.06 |
[TIL] 20230704 (0) | 2023.07.06 |