본문 바로가기
Computer/컴퓨터구조

[컴퓨터구조] Arithmetic for Computers(1): 덧셈과 뺄셈

by 거부기씨 2024. 5. 29.
728x90
반응형

컴퓨터는 손으로 계산할 때처럼, 오른쪽에서 왼쪽으로 한 비트 씩 더하고, 이때 생기는 올림수(carry)는 바로 왼쪽 자리로 보내 더한다.

 

컴퓨터에서의 뺄셈은 덧셈을 이용한다. 뺄 값의 부호를 바꾸어 더한다. 2의 보수법을 이용한다.


연산 결과를 하드웨어에서 표현할 수 없을 때 오버플로가 발생한다. RISC-V 구조의 경우 32비트 워드로 표현할 수 없는 경우 (덧셈 결과 올림수 발생해 33비트가 될 경우) 오버플로가 발생한다.

 

어떤 경우에 오버플로가 발생할 수 있을까?

 

부호가 다른 피연산자를 더할 경우에는 오버플로가 발생하지 않는다. 계산 결과의 절대값이 두 피연산자 중 어느 하나보다 커질 수 없기 때문이다.

 

하지만 피연산자의 부호가 같을 경우 오버플로가 발생할 수 있다. 실제 오버플로가 발생했을 때 어떻게 알 수 있을까?

 

덧셈 결과 33번째 비트가 필요한 경우, 32비트 워드의 최상의 비트값은 부호 비트가 아니게 된다. 즉, 두 양수를 더한 값이 음수가 되거나, 두 음수를 더했는데 합이 양수가 되는 경우 오버플로가 발생했음을 알 수 있다.

 

부호없는 정수는 오버플로가 무시되는 메모리 주소에 사용된다. 부호 없는 정수도 오버플로를 탐지할 수 있을까? 컴파일러는 분기명령어를 사용해 부호없는 오버플로를 검사할 수 있다. 즉, 두 수를 더한 합이 더해지는 두 수 중 어느 하나보다 작으면 오버플로가 발생한 것으로 판단한다.

 

 

728x90
반응형