소프트웨어 공학용 수학

정수

단점이없어지고싶은개발자 2022. 9. 24. 21:58
반응형

정수(integer)

 

구성요소

  • 양의 정수 : 1, 2, 3
  • 0
  • 음의 정수 : -1, -2, -3

 

부호 없는 (unsigned)

  • 음의 정수는 표현 불가

 

부호 있는(signed)

  • 양의 정수, 0 , 음의 정수 가능

부호 존재 여부에 따라 자료형이 표현 가능한 수의 범위가 달라진다.

 

부호 없는 (unsigned)

비트 8개를 쓰고 있기 때문에 최대 표현의 수는 256개다. (0 ~ 255)

 

만약 1111 1111(2) + 1(2) 를 더하면 무슨일이 발생할까?

1 0000 0000이 된다. 하지만 1바이트당 표현 할 수 있는 비트는 8개이기 때문에 앞에 1은 버려지게 된다.

예상 결과가 최댓값보다 커질 때 오버플로가 발생한다. 

 

만약 1111 1111(2) + 10(10)과 1 0000 000(2) +

9(10) 더하면 무슨일이 발생할까?

똑같이  1 0000 1001(2) 된다. 하지만 오버플로로 인해 동일하게 가장 앞자리는 1은 버려지고, 각각 10이 표현된다. 

넘쳐진 수는 버려지고 나머지만 남게 된다.

 

부호 있는 (signed)

음의 기호(-)를 어떻게 표현 방법은 

1비트는 부호표현, 7비트는 숫자표현 -> 범위는 -127 ~ 127

8비트 중 가장 맨 앞 비트가 0이면 양수 1이면 음수다.

 

부호 절대 값 표기법

최상위 비트만 사용하여 음수, 양수를 구분

양수 0000 0000(2) / 음수 1000 0000(2)

하지만 한계가 있다. 

  1. 0000 0000(2) 와 1000 0000(2)는 +0 / - 0으로 0이 2개가 된다.
  2. 양수와 음수를 더할 때 비트패턴으로 인한 오류가 발생한다. 왜냐하면 컴퓨터는 덧셈만 할 수 있기 때문이다.

보수(complement)

보수는 보충을 해주는 수를 의미한다. 현재의 숫자에서 자릿수가 1단계 올라갈 수 있는 수가 몇인지를 구하면 된다.

 

N진법에는 두 가지 보수가 있음

N의 보수

N - 1의 보수

 

10의 보수

  • 10이 되기 위해 필요한 수
  • 2는 10의 보수는 8
  • 7은 1의 보수는 3
  • 즉, 10의 보수는 10의 n승이 되기 위해 필요한 수를 뜻한다.

만약 324 - 4를 구하려면 320 - 4 + 1000 - 1000으로 계산을 한다.

1. -4 + 1000 = 996

2. 320 + 996 = 1316

3. 1316 - 1000 = 316

4. 결과 값은 316이 된다.

 

1의 보수

구하는 방법은 2의 n승이 - 1 - N

1의 보수를 구하는 가장 좋은 방법은 각 비트를 뒤집으면 된다.

1001 1001(2) > 0110 0110(2)

 

1의 보수를 하는 방법

n자리수를 가면 이진수의 n의 1의 보수는 2의 n승 - 1 - N

예) 1001 1001(2)의 1의 보수 구하기

 

가장 쉽게 구하는 방법은 각 비트를 뒤집으면 된다.

1001 1001 => 0111 0110(2)

 

양수는 0000 0001 <-> 음수 1111 1110

 

장점

  • 간단히 뺄셈가능

한계점

  • 0이 두개다
  • 컴퓨터가 사용하기에 아직도 2%복잡

예) 0000 0010 = 2

+    1111 1110 = -1

------------------

1 0000 0000

+                  1

 

재차 1을 더해줘야한다.

------------------

0000 0001

 

최소값이 작은 값이 결과로 나오는 경우를 언더플로라고 한다. 

오버플로 <-> 언더플로

반응형