일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Codable
- COLOR
- SwiftUI
- 운영체제
- 앨런
- Swift
- decode
- forEach
- 비동기
- struct
- Apple Developer Academy
- 동기화
- @state
- async
- Algorithm
- 알고리즘
- 100 days of SwiftUI
- core data
- IOS
- 인프런
- 가상 메모리
- scrollview
- deadlock
- Linked List
- 상호배제
- 동시성
- 오브젝트
- 프로세스 스케줄링
- UserDefaults
- 데드락
Archives
- Today
- Total
기어가더라도 제대로
2-1. 디지털 연산(산술연산) (만화로 쉽게 배우는 CPU 中) 본문
'0'과 '1'은 상반되는 상태
컴퓨터 내부에서 0과 1의 기준
H : 전압이 어떤 기준보다 높다(High) -> 1
L : 전압이 어떤 기준보다 낮다(Low) -> 0
- 시스템에 따라 H -> 0, L -> 1로 놓는 설계가 있을 수도 있다.
계산은 bit를 기준으로!
bit : 2진수의 1자리(0 혹은 1)를 1비트(bit)라고 부른다.
예시
- 9(10) -> 1001(2)
2진수에 의한 숫자 표현
- 10진수
356 = (3 * 10^2) + (5 * 10^1) + (6 * 10^0)
- 2진수
1011 = (1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (1* 2^0)
- 소수점 이하의 표현
0.14 = 0 \* 10^0 + 1\* 10^-1 + 4 \* 10^-2
0.14 = 0 \* 2^0 + 0 \* 2^-1 + 0 \* 2^-2 + 1 \* 2^-3 + 0 \* 2^-4 + 0 \* 2^-5 + 0 \* 2^-6 + 1 \* 2^-7 + ...
1 0.5 0.25 0.125 0.0625 0.03125 0.015625 0.0078125
어떠한 진수도 소숫점 아래의 수를 표현할 때 100% 정확성을 표시하기는 어렵다.
고정 소수점과 부동 소수점
아주 작은 값이나 아주 큰 값을 계산할 때는 부동 소숫점이 아주 편리하다.
1억 = 100,000,000 = 10^8
이러한 표현을 지수 형식이라 하고, 10^n의 n 부분을 지수라고 한다.
고정 소수점 | 부동 소수점 |
---|---|
123. | 1.23 * 10^2 |
1230000. | 1.23 * 10^6 |
0.00000123 | 1.23*10^-6 |
고정 소수점 방식에서는 큰 값이나, 작은 값을 표현할 때 자릿수가 늘어나야 하는 반면
부동 소수점의 경우 지수의 값을 바꾸기만 하면 된다. 그래서 편리!
실제 컴퓨터는...?
- 컴퓨터에서의 부동 소수점 표현의 예1.69 * 2^n가수부 지수부
규칙 : 가수부의 수는 1 이상 2 미만의 숫자로 표현
2진수에 의한 덧셈과 뺄셈
- 덧셈
1 + 1 = 10
보수와 뺼셈
10진수에서 15를 뺀다는건 -15를 더한다와 같다. 컴퓨터는 덧셈 밖에 할 줄 모르는 바보이기 때문에 덧셈으로 뺄셈을 해야한다(?)
이게 무슨말이냐면 수로 이해하면 쉽다
A 식 | B 식 |
---|---|
15 | 15 |
(-15) | + 85 |
0 | 100 |
계산 결과에서 하위 2자리만 비교하면 A식은 '0'이고 B 식은 '00'이다.
그래서 같은 값이다...
그럼 1은 조상님이 가져가는가? 결과적으로 그렇다.
자리넘침 이라고 표현하는데 2자리 계산을 상정하고 계산한거기 때문에 3자리값인 1은 모른다. 무시해도 좋다.
이를 다시말하면
보수 : 원래 수에 더하면 자릿수가 올라가는 수(자리넘침이 발생하는 수)
실질적으로 이 보수를 음수처럼 컴퓨터는 사용을 한다.
2진수에서 뺄샘
1010 1000
0101 1000
- ---
1 0000 0000
여기서도 앞에 1은 무시한다. 8자리 계산이였기 때문에 무시한다.
### 보수를 구하는 방법
step 1 : 원래수의 각자리를 모두 뒤바꾼다
step 2 : 그 뒤바꾼 수에 1을 더한다
'CS' 카테고리의 다른 글
훌륭한 프로그래머가 되기 위한 팁과 경험담 (15장.한권으로 읽는 컴퓨터 구조와 프로그래밍) (0) | 2022.06.05 |
---|
Comments