CS/컴퓨터구조

[컴퓨터구조] #3 정수표현법

taeyeoxn 2024. 4. 15. 02:05

• 정보를 어떻게 표현할까?

 

정보 = 비트 + 비트가 의미하는게 뭔지

이진 숫자로 정보를 표현한다.

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(산술 시프트) : 이동된 빈 자리는 부호 비트(최상위 비트)로 채워진다.

8비트 기준. 양수와 음수일때

 

• 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