1 minute read

컴퓨터에서의 수치 연산

컴퓨터는 다양한 계산을 수행하기 위해 정수(Integer)와 실수(Floating-Point)의 연산을 처리해야 한다. 하지만 하드웨어는 고정된 비트 수로 숫자를 표현하기 때문에, 인간이 생각하는 일반적인 산술과는 다른 제약이 따른다.

정수 산술 (Integer Arithmetic)

정수 표현 방식

정수는 일반적으로 2의 보수(Two’s Complement)를 사용하여 표현된다. 이는 덧셈과 뺄셈 연산을 동일한 회로로 처리할 수 있도록 도와준다.

  • n비트 정수 범위:
    • -2n-1 ~ 2n-1-1
    • 예: 8비트 정수 -> -128 ~ 127

덧셈 연산 (Addition)

정수 덧셈은 비트 단위의 이진 덧셈으로 처리된다.

  • Example: 7+6

Alt text

  • 오버플로우 발생 조건
    • 양수 + 양수 -> 음수 결과 : 오버플로우 발생
    • 음수 + 음수 -> 양수 결과 : 오버플로우 발생
    • 부호가 다른 두 수의 덧셈 : 절대 오버플로우 없음
7 (00000111) + 6 (00000110) = 13 (00001101) → 정상

64 (01000000) + 65 (01000001) = 129 (10000001) → 오버플로우!

뺄셈 연산 (Substraction)

뺄셈은 보통 두 번째 피연산자의 2의 보수를 취해 덧셈으로 변환한다.

  • Example 7 - 6 = 7 + (-6)

Alt text

  • 오버플로우 발생 조건
    • 양수 - 음수 -> 음수 결과 : 오버플로우
    • 음수 - 양수 -> 양수 결과 : 오버플로우
    • 같은 부호끼리 뺄셈 : 오버플로우 없음

오버플로우 처리(Overflow Handling)

  • 언어별 처리 방식
    • C언어 : 오버플로우 무시
  • Ada, Fortran 등 : 오버플로우 시 예외(Exception) 발생
    • add, addi, sub(MIPS) -> 오버플로우 발생 시 트랩
  • MIPS에서의 오버플로우 처리
    • 오버플로우 발생 시 -> 예외 핸들러로 점프
    • 현재 PC(Program Counter)는 EPC(Exception Program Counter)에 저장
    • 복귀 시 mfc0 명령어로 EPC에서 주소 복원