반응형
비트는 특정 구간대의 전기 신호만 해당 신호로 받아들이고 0.2V ~ 0.9V 사이의 전압은 신호로 받아들이지 않아서 노이즈 등에 영향을 받지 않을 수 있다.
binary에서 쓰이는 소수점은 decimal에서의 소수점과 다르다.
- 1.20 (10진법) 에서 소수 첫째 자리는 1 / 10을 의미
- 1.20 (2진법) 에서 소수 첫째 자리는 1 / 2을 의미
아래 도표 익숙해지기
bit 및 bit 연산을 이용해서 Set를 표현하고 조작할 수 있다. (비트 마스킹과 유사한 방식)
- File I/O (C library) 에서 시스템에 어떤 파일들이 input으로 주어질 수 있는지를 판단할 때도 흔히 사용되는 방식
Logical Operations in C
- &&, ||, ! 연산자는 항상 0이나 1만 반환한다
- 0은 "False", nonzero는 "True"로 본다
Shift Operations
- Left Shift : 왼쪽의 비트를 날려버리고 오른쪽에는 항상 0을 채워준다
- Right Shift
- Logical Shift : Fill with 0's on left
- Arithmetic Shift : Replicate most significant bit on left
Quiz. x << 8 은??
예상 답안 : 하나의 byte는 8 bit을 가지므로 어떠한 수가 x에 담겨있든 8번 shift되면 0이 될 것이다.
실제 답안 : 대부분의 머신에서는 불필요한 연산을 줄이기 위해 shift를 해주는 수를 mod 8 연산해준다. 따라서 x
Encoding Integers
- Unsigned와 Signed에서 수를 변환하는 법은 쉽지만 공식으로 쓴다는게 멋있어서..
Numeric Ranges
- 범위는 쉽지만 Decimal과 Hex 간 변환을 연습해보고자..
Unsigned & Signed Numeric Values
- C에서는 Unsigned와 Signed 간의 변환 과정을 쉽게 이해해야 한다
- Equivalence
- Same encodings for nonnegative values
- Uniqueness
- Every bit pattern represents unique integer value
- Each representable integer has unique bit encoding
Mapping Between Signed & Unsigned
- 당연한 말이지만 reinterpret하는 방식에 대해서 생각하고 넘어가도록
- 양수에서는 그대로 표현된다
- 음수에서는 T2U 과정에서는 +16, U2T 과정에서는 -16을 해준다 (4비트라고 가정)
Casting Surprises
- 비교 연산에서 두 수가 모두 signed라면 signed로 연산
- 비교 연산에서 하나의 수라도 unsigned라면 나머지 수를 unsigned로 캐스팅 후 연산
Quiz. 아래의 절대값 반환 코드에서 x에 Tmin이 들어간다면?
if (x < 0) return -x; else return x;
Answer : Tmin이 반환된다
요약
1. |Tmax| = |Tmin| - 1
2. Umax = 2 * Tmax + 1
- Tmax : 0111....1
- 2 * Tmax : 111....10
3. Signed와 Unsigned간 캐스팅
- Bit pattern is maintained
- But reinterpreted
- Can have unexpected effects : adding or subtracting 2^w
Quiz. What happened if i is Unsigned int?
for (i = n-1; i>= 0; i--) func(a[i]);
Answer : loop forever
Quiz. What happened if i is signed int?
for (i = n-1; i - sizeof(char) >= 0; i--) func(a[i]);
Answer : sizeof method returns unsigned value. So comparison will be evaluated as unsigned.
Sign Extension
- 비트 확장 시 sign bit가 0이든 1이든 해당 수로 확장된 비트에 모두 복사해야 값이 유지된다
Quiz. ffff0123은 음수인가? (바로 판단하기)
Answer : f를 binary로 변환하면 1111이므로 음수이다. 추가적으로 ffff이면 1이 16번 연속되므로 제법 0에 가까운 값일 것이다.
Sign Truncation
- 비트 축소 시 왼쪽 비트는 모두 날려버린다
- Unsigned : mod operation한 값과 동일
- Signed : similar to mod
모든 이미지 파일은 해당 강의의 ppt 자료를 사용했습니다.
반응형
'Computer Science Lectures > Introduction to Computer Systems - CMU' 카테고리의 다른 글
Lecture 06: Machine-Level Programming 2: Control (0) | 2022.10.24 |
---|---|
Lecture 05: Machine-Level Programming 1: Basics (0) | 2022.10.19 |
Lecture 04: Floating Point (0) | 2022.10.18 |
Lecture 03: Bits, Bytes, and Integers (cont.) (0) | 2022.10.11 |
Lecture 01: Course Overview (0) | 2022.10.09 |