cs/컴퓨터구조

데이터와 표현- 컴퓨터의 숫자 표현

Suna[Frontend Study] 2025. 12. 31. 18:01

비트와 바이트 

  • 컴퓨터는 2진법만을 사용해 정보를 저장한다(0과1)
  • 전기 신호의 전압이 일정 기준보다 높으면 1 , 아니면 0으로 변환하여 사용한다.

 

비트(bit)  

  • 비트는 0과1을 표현하는 최소 단위이다.
  • 여러개의 비트를 조합하여 데이터를 표현한다. ex)000,111....등

 

바이트(byte)

  • 8비트가 합쳐져서 1바이트를 이룬다. 즉 8비트를 한 묶음으로 표현한 단위이다.
  • 1바이트당 2^8 = 256가지의 데이터 표현이 가능하다

 

 

컴퓨터의 숫자표현 - 정수 

컴퓨터가 정수를 다루는 방법 

 

부호비트

  • 컴퓨터는 n비트에서 가장 왼쪽의 비트를 부호 비트로 사용하여 음수를 표현한다. 

ex) 4비트, 1011 => 맨 왼쪽, 즉 최상위 비트가 1임으로, 음수임을 확인 가능함

 

2의 보수 

  • 음수를 저장하기 위해 사용
  • 모든 비트를 반전시키고 1을 더함

0011의 2의보수

0011=> 1100(반전)=>1101 (1더하기)

n개의 비트로 표현 가능한 정수 범위 : 2n-1 ~ 2n-1-1

 

컴퓨터의 숫자표현 - 실수 

컴퓨터가 실수를 다루는 방법 - 부동소수점 방식으로 실수를 표현하고 저장함

부동소수점 

 

32비트를 기준으로 가장 최상위 비트(가장 왼쪽)을 부호비트로 사용하고 , 나머지 31개 비트를 지수 필드와 가수 필드로 분리 

 

  • 지수필드(E) : 값의 범위를 나타내는 2의 거듭제곱 수를 저장

                            23~30번째 비트, 256 (28)개 표현이가능 

  • 가수(M)필드 : 정밀도를 나타내기 위해 실제 숫자의 유효한 자릿수를 저장함 (0또는 1만 옴)

                               233개의 표현이 가능하다.

 

 

 

### 8.3125

정수: 8 (1000)
 2진수로 표현 = 8421 (1000)

소수 : 0.3125 (0101)
0.3125*2 = 0.625(0)
0.625*2=1.25 (1)
0.25*2=0.5 (0)
0.5*2= 1.0 (1)  <==소수자리가 0이므로 종료   

즉 1000.0101임. 
이것을 부동소수점 방식으로 표현하면 
소수점 왼쪽으로3번이동 => 1.0000101 *23
지수(E)부분: 3 (23이기 때문에 ,,)
이 3을 다시 2진수로   표현 00000011

이때, 지수는 음수 표현을 위해 127을 더함. 즉 00000011 + 01111111 = 10000010 

왜 127을 더하냐면 부동 소수점에서 지수는 8비트임, 즉 0~256가지 표현 가능, 이 범위에서 각각 -128을 빼면 

-128~127이 나옴. 그러면 지수가 어떤 값이든 양수로 저장할 수 있다.

cf) 1.0000101 *23 

가수(M)부분은 0000101가 가수필드에 가장 왼쪽부터 입력된다. 

 

 

 

부동소수점의 한계 

실수는 2진수로 정확히 표현되기 어려워서 컴퓨터는 근사값으로 저장한다.

ex) 0.1을 2진수로 변환하면 

정수 :  0 

소수 : 000110......(무한 반복) 

0.1*2 = 0.2 
0.2*2 = 0.4
0.4*2 = 0.8
0.8*2 = 1.6
0.6*2 = 1.2
0.2*2 = 0.4 
. 
.
.

 

=> 유한한 비트로는 이를 완전히 표현이 불가능하기에 근사값으로 저장한다. 

console.log(0.1+0.2)  //각 근사값으로 저장
//0.30000000000000004
//근사값이 더해서 생기는 오차 
//실제 내부 메모리에서는 
// 0.1=>0.100000000000000000555****    (2진수를 10진수로)
//0.2=>0.2000000000000000001110****

cf) 이때 console.log(0.1) //0.1이 나오는 이유는  JS엔진이 근사값을 반올림해서 계산하기 때문이다. 

 

한계점 

- 실수 연산이 반복되면 오차가 합산되어 누적됨

- 누적된 오차는 특히 금융,과학 등에서 문제를 일으킴

 

해결안 

1) Decimal (십진 임의정밀도 방식)

  • 실수를 10진 가수와 10진 지수 형태로 저장
  • 내부적으로 큰 정수값과 소수자릿수를 함께 보관
BigDecimal a= new BigDecimal("0.1") //문자열로
BigDecimal b= new BigDecimal("0.2")
BigDecimal C=a.add(b)

즉, 부동소수점과 같이 지수 가수를 그대로 한다. 하지만 10진 형태로!  

ex) 0.2=> 2* 10-1

 

2) 고정 소수점(Fixed-point)방식

  • 실수를정수로 변환하여 저장하고 , 소수점 위치는 고정
  • 모든 값이 동일한 자릿수 규칙을 따름->빠른 연산 가능 
SCALE=100 // 소수 둘째자리
price=int(19.99 * SCALE)  // 1999
qty=int(3*SCALE) //300
total=(price * qty) //SCALE=- #5997 =>59.97

 

 

 

cf)[2026] 말이 트이는 cs기술면접을 통해 작성된 내용입니다. 

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

CPU 구성과 기능  (0) 2026.01.04
컴퓨터의 구성  (1) 2026.01.01
데이터와 표현- 컴퓨터의 문자 표현  (0) 2025.12.31