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

데이터 형식, 정수

by ohojee 2023. 12. 6.

데이터 형식

  • 컴퓨터가 지원하는 데이터의 표현 방식 ⇒ 컴퓨터에서 제공하는 명령어 집합으로 연산할 수 있는 정보의 표현
  • 어떤 데이터를 다룰 때 하드웨어로 처리하면 빠르지만 유연 x 소프트웨어로 하면 속도는 조금 느리지만 유연
  • ex)
    • 간단한 데이터 형식: 정수, 불리언, 문자, 부동소수점 수
    • 복합적인 데이터 형식: 문자열, 배열, 벡터, 스택, 큐, etc
  • 모든 데이터 형식을 지원하면 하드웨어의 복잡성과 비용 ⬆️ ⇒ 대부분의 아키텍처는 소수의 데이터 형식을 지원

기수법과 진법

  • 기수법: 기호를 사용하여 수를 나타내는 방법(주어진 수를 몇 개의 정수를 써서 나타낼건지)
  • 진법: 자릿값이 올라갈 때마다 일정 배수로 커지는 수의 표시법

정수

무부호 정수(unsigned integer)의 표현

  • 범위: 00 ~ 2k12^k - 1 (양수)

유부호 정수(signed integer)의 표현

부호-크기 방식

  • 1비트: 부호 비트, 나머지 비트: 크기 필드
  • 범위: 2k1+1-2^{k-1} + 1 ~ 2k112^{k-1} - 1
  • 비트 확장
    • 맨 앞에 0이 채워지는 것이 아닌 중간 값이 늘어남 cuz 맨 앞은 부호비트
    • 부호비트만 바꾸면 양, 음수 변환 용이
    • 연산 수행 시 부호 별도 점검 필요
    • +0, -0이 따로 있음
  • 더하기 연산
    • 부호 같을 경우: 부호 그대로 사용, 절댓값의 덧셈 수행
    • 부호 다를 경우: 절대값이 큰 수의 부호 선택, 절대값의 뺄셈 수행

7-초과 코드(exceed code) 방식

  • 실제 수에 어떤 수를 더해서 표현 ⇒ 원래 수에 7을 더한 값을 사용 ⇒ 음수를 다루지만 저장할 때는 양수만 다루는 것처럼 사용 o
    • 7은 어디서 나옴? 4비트라 15까지 표현할 수 있는데 그거에 중간값을 찾음 그럼 8비트의 초과코드는? 255/2 = 127이라 127-초과 코드가 됨
  • 바이어스된 수(biased number)라고도 부름
  • 부호비트 x
    • 대소 비교 용이
  • 단점
    • 덧셈은 초과수를 빼야하고, 뺄셈은 초과수를 더해줘야 됨
    • ex) 1 + 2 = 1000 + 1001 = 10001 = (1+7) + (2+7) =/= 3 7이 두 번 더해져서 한 번 빼줘야함

1의 보수 방식

  • 𝑘𝑘비트 정수의 경우, 양의 2진수 𝑦𝑦에 대한 1의 보수는 (2𝑘1)𝑦(2^𝑘−1) − 𝑦 ⇒ 음수를 표현하기 위해 각 비트를 0과 1 사이에 상호 반전
  • 범위: 2k1+1-2^{k-1} + 1 ~ 2k112^{k-1} - 1
  • 부호비트 존재
  • 비트 확장(=부호 확장(부호의 값만큼 앞에 붙여줌))
    • 양수: 앞에 0을 채움
    • 음수: 앞에 1을 채움
    • 양, 음수 변환 용이
    • +0, -0이 따로 있음
  • 더하기 연산
    • 순환자리올림 발생, 1의 자리에 한 번 더 더해줌

2의 보수 방식

  • 𝑘𝑘비트 정수의 경우, 양의 2진수 𝑦𝑦에 대한 2의 보수는 2𝑘𝑦 2𝑘 − 𝑦 ⇒ 음수를 표현하기 위해 1의 보수에 1을 더함
    • ⭐ 음수에만 +1
  • 범위: 2k-2^k ~ 2k12^k - 1
    • 범위 값 넘어가면 오버플로우 발생
  • 비트확장(=부호 확장(부호의 값만큼 앞에 붙여줌))
    • 부호비트는 아니지만 맨 앞의 값으로 부호를 알 수 있음
    • 0이 1개
    • 양, 음수 변환 불편
  • 더하기 연산
    • 덧셈, 뺄셈 연산 쉽게 구현
    • 0에 대한 표현의 유일성이 범위의 대칭성보다 더 중요

예제

50 + (-10)(-50) + (-10)(-50) + 10
부호-크기 0011 0010(50) + 1000 1010(-10) ———————- 0010 1000(40) 1011 0010(-50) + 1000 1010(-10) ———————- 1011 1100(-60) 1011 0010(-50) + 0000 1010(10) ———————- 1010 1000(-40)
1의 보수 0011 0010(50) + 1 111 0101(-10) ———————- 10010 0111 0010 0111 + 1 ————————- 0010 1000(40) 1100 1101(-50) + 1111 0101(-10) ———————- 11100 0010 1100 0010 + 1 ———————- 1100 0011(-60) 1100 1101(-50) + 0000 1010(10) ———————- 1101 0111(-40)
2의 보수 0011 0010(50) + 1 111 0110(-10) ———————- 0010 1000(40) 1100 1110(-50) + 1111 0110(-10) ———————- 1100 0100 ⇒ 뒤집고 +1 ⇒ 0011 1100(60) ⇒ 부호 붙이기 ⇒ -60 1100 1110(-50) + 0000 1010(10) ———————- 1101 1000 ⇒ 뒤집고 +1 ⇒ 0010 1000(40) ⇒ 부호 붙이기 ⇒ -40

Uploaded by N2T

'이론 > 컴퓨터구조' 카테고리의 다른 글

연산장치 개요  (1) 2024.01.02
실수, 비수치 데이터  (1) 2023.12.24
복잡도에 따른 명령어 집합  (1) 2023.12.04
주소 지정 방식  (1) 2023.11.30
명령어와 메모리  (0) 2023.11.27

댓글