컴퓨터(Computer Science)/컴퓨터구조(Computer Arichitecture)

Integer Arithmetic 사칙연산 [컴퓨터구조]

게임이 더 좋아 2020. 4. 26. 23:14
반응형
728x170

Artihmetic Operation에 대해서 알아볼 것이다.

 

Addition, Subtraction, Multiplication, Division

물론 Integer 기준으로 먼저 진행해볼 것이다.

 

 


 

덧셈이다.

 

 

어렵지 않다.

그냥 두 수를 더하면 된다.

여기서는 자리수가 바뀌는 것을 carry라고 표현했다.

 

Overflow에 대한 설명도 했는데

Overflow는 표현할 수 있는 값의 범위를 넘어가서 정상적이지 않은 값이 되는 것을 말한다.

 

일반 사람들은 -로 값을 벗어나면 언더플로우 +로 값을 벗어나면 오버플로우라고 하는데

사실 둘다 오버플로우다.

사실 표현할 수 없는 것은 해당 bit로 표현할 수 없기 때문이지

즉 메모리 부족이 원인이다.

숫자의 부호가 중요한 것이 아니다.

 

오버플로우는 부호가 같은 수끼리 더할 때 발생한다.

 


 

 

뺄셈을 보자

뺄셈은 사실 덧셈의 연장이다.

7 - 6을 7 + (-6)으로 바꾸었다.

 

 

그냥 덧셈연산과 같이 carry가 발생하면 올려주면 된다.

 

마찬가지로 overflow는 발생할 수 있다.

덧셈과는 다르게 음수에서 양수를 뺄 경우,  양수에서 음수를 뺄 경우 발생할 수 있다.

 


 

 

사실 이러한 오버플로우는 사용자에게 모든 것을 맡긴다.(C에서는)

(ignore)덧셈 연산이나 뺄셈 연산에서 오류가 발생하지 않음을 의미한다.

다른 언어에서는 exception handling을 하라고 요구한다.

 

 


 

참고로 오버플로우에 대해서 알아두고 넘어갈 부분이 있다.

 

바로 Multimedia 에서의 연산이다.

 

 

그래픽이나 미디어같은 경우 주로 8비트, 16비트의 데이터로 이루어진 경우가 많아서64-bit adder를 (8,8), (4,16), (2,32)로도 쪼개서 사용할 수 있다. 

그것을 바로 SIMD라고 부른다. Adder를 사용하는 것은 같지만 Data를 다르게 사용한다는 의미다.

 

Saturating operations이란 오버플로우 발생 시 최댓값으로 값을 유지하는 것을 말한다.

 

특히 영상분야에서 많이 쓰이는데 영상 같은 경우 픽셀이 RGB를 표현할 때  hexa로 표현된다.

0xFFEF40 이런식으로 표현되는 경우가 많은데 흰색과 흰색을 섞으면 어떻게 될까?

0xFFFFF + 0xFFFFFF  =???당연히 오버플로우가 발생한다.

하지만 최댓값 유지로 그 값이 흰색으로 유지된다.

 


 

곱셈이다.

덧셈을 많이 한 것이 곱셈이라는 초등학교 때 생각을 해보면 된다.

 

 

우리가 평소에 하던 곱셈이랑 같이 한다.다만 이진법일 뿐이다.

 

간단하게 표현해보자면

 

사이즈가 2배로 커졌다.32-bit의 곱셈은 64-bit가 나온다.

 

하드웨어의 구성인데이해가 처음엔 안 갈 것이다.그래서 플로우차트를 준비했다.

 

1. Multiplier의 가장 오른쪽 비트를 조사한다.1인경우 multiplicand를 product에 더한 다음 2번을 실행한다.0인경우 2번을 실행한다.

2. Multiplican는 left shift, multiplier는 right shift를 한다.

3. 이 과정을 32번 반복한다.

 

예를 들자면 이렇게 한다.

 

 


 

하지만 곱셈의 계산은 다르게도 할 수 있다.

 

 

multiplicand와 ALU가 32-bit를 가지는 것이 특징이다.

또한 multiplier가 없다. 실제로 없는 것은 아니고

product의 우측 32bit가 multiplier다.

 

달라질 것은 product의 최하위 비트가 1인지 0인지 판단하는 것이다. 

 

 

예를 들면

 

하드웨어와 같이 보면

 

어떤 원리에 의해 곱셈이 되는거지..?

이해하지 않아도 좋다.

저것을 읽고 그렇구나라고 할 수 있을 정도면 된다.

 


 

또 다른 방식이 있다.

실제로 여러번 더하는 방식이다.

 

 

빠르지만 가산기를 많이 필요로 한다.

비용이 많이드는 대신 빠르다.

 


 

MIPS 에서 operation 연산은 이렇게 된다.

 

 

**HI는 상위 32비트 LO는 하위 32비트를 말한다.

그리고 왜 곱하랬더니 자꾸 shift만 시키는지 궁금했다면 답이 여기있다.

 

 

우리는 비트를 미는 것이 *2 와 /2 라는 것을 저번에 알았다.

왼쪽으로 밀면 2배 커지는 것이고 오른쪽으로 밀면 2로 나눠지는 것이다.

 


 

그리고 나눗셈마저 하면 Integer에서의 연산은 끝이 난다.

 

 

**나눗셈에서 가장 중요한 것은 0으로 나누는 것이 불가능하다는 것이므로 분모를 체크해야한다.

 

나눗셈은 곱셈보다는 복잡하다.

0도 체크해야하고 분모가 분자보다 작거나 같아야 한다.

즉, 빼서 음수인지 아닌지 판단을 한다.

 

 

모두 이해할 필요는 없고 이렇게 나눗셈이 되는구나 라고 알면 된다.

 

예를 보고 하드웨어 구조도 보면서 알아보자

 

하드웨어 구조와 플로우차트

 

 

하드웨어랑 같이 보자면

 

어떤 식으로 이루어지는가 알아만 두자.

 

 

 

 

 

 

 

728x90
반응형
그리드형