• 정보를 어떻게 표현할까?
정보 = 비트 + 비트가 의미하는게 뭔지
이진 숫자로 정보를 표현한다.
2진수 N비트 = 2^N 경우의 수
• Unsigned Integers(부호없는 정수형)
음수표현이 불가능하다.
• Signed Integers(부호가 있는 정수형)
양의 정수와 음의 정수 표현이 모두 가능하다.
Positvie numbers(양수)는 Unsigned Integers와 동일하지만
Negative numbers(음수)는 3가지 표현법을 이용해 표현할 수 있다.
공통 : 첫번째 비트는 부호를 표현하고, 나머지 비트로 크기를 표현한다.
(첫번째 자리 0 : 양수 / 1 : 음수)
1. Sign-magnitude Representation(부호-크기 표현법)
0을 표현하는 방식이 2개라 적합하지 않다.
이는 정보 처리 및 회로를 설계할 때 혼란을 가져올 수 있다.
2. One's Complement Representation(1의 보수 표현법)
음수를 표현하기 좋다.(보수 이용)
하지만 이 방법도 0을 표현하는 방식이 2개라 사용되지 않는다.
3. Two's Complement Representation(2의 보수 표현법)
0을 표현할 수 있는 방법이 1개만 존재해서 하드웨어에 적합하다.
• 2의 보수 표현법
음수 표현법 : 보수 취하고 +1
따라서 ~x +1 == -x라는 식이 성립한다. (~x는 'NOT' 표현)
• Sign Extension(부호 확장)
예를 들어 4비트를 8비트로 확장한다고 가정하면,
부호 확장을 사용하여 새로운 비트들을 추가하면서 최상위 비트(부호 비트)를 유지한다.
원래 숫자 : 1101
확장된 숫자 11111101
• Bit-level Operations(비트연산자) in C
비트연산자 : &(AND), |(OR), ~(NOT), ^(XOR)
모든 '정수'를 나타내는 데이터형에 사용 가능하다.
& : 둘다 1이면 1 / 하나라도 1이 아니면 0
| : 둘 중 하나라도 1이면 1
^ : 같으면 0 / 다르면 1
• Logic Operations(논리연산자) in C
논리연산자 : &&, ||, !
Early termination : 만약 첫번째 피연산자만으로 결과를 결정할 수 있다면 성능을 향상시킬 수 있다.
• Shift Operations(쉬프트 연산, 비트단위 이동연산)
Left shift : x << y
비트 x를 y만큼 왼쪽으로 이동
Right shift : x >> y
비트 x를 y만큼 오른쪽으로 이동
Logical shift(논리 시프트) : 이동된 빈자리는 0으로 채워진다.
Arithmetic Shift(산술 시프트) : 이동된 빈 자리는 부호 비트(최상위 비트)로 채워진다.
• Addition
필요에 따라 자리올림수(carry)를 고려한다.
연산 결과가 해당 데이터 타입의 표현 범위를 벗어날 때 overflow가 생긴다.
음수 + 양수 : overflow를 방지할 수 있다.
양수 + 양수 / 음수 + 음수 : overflow가 발생할 수 있다.
Additon에서도 overflow가 발생하는 것을 확인할 수 있다.
Multiplication에서는 더 심하게 overflow가 발생한다.
'CS > 컴퓨터구조' 카테고리의 다른 글
[컴퓨터구조] #6 ISA(2) (0) | 2024.04.23 |
---|---|
[컴퓨터구조] #5 ISA(1) (0) | 2024.04.22 |
[컴퓨터구조] #4 부동소수점 (0) | 2024.04.19 |
[컴퓨터구조] #2 성능 (0) | 2024.04.10 |
[컴퓨터구조] #1 컴퓨터구조 (0) | 2024.04.04 |