본문 바로가기
Start Beginner/CS for Beginner

[CS 입문] 05. 진법과 보수

by 초보개발자_푸른서 2023. 6. 12.

 

1. 2진수와 16진수

십진법 - Decimal numerical system - 손가락 10개

이진법 - Binary numerical system - 진공관과 트랜지스터의 스위치

 

 

1) 2진수와 16진수

  • 2진수 한 자리 수 - 1비트
  • 16진수 두 자리수 - 1바이트, 8비트
    • '0x'표기법 : 0x16
    • ex) 0xFF - 255 ( 1바이트, 8비트 )

CSS에서 사용하는 색상 표기 방법

CSS 색상 표기 - 16진수 표기
#03 F1 E3 - 24비트 컬러
( + 알파값 - 32비트 트루 컬러 )

 

 

2) 16진수 사용 이유

  1. 10진수 이상을 표현하기 위하여 16진수를 사용할 수 밖에 없다.
  2. 간략한 정보 전달 표기를 위하여

 

 

 

2. 실수 진법 변환

1) [실수] 2진수 => 10진수

 

 

2) [실수] 10진수 => 2진수

소수부분에 2를 곱하고, 나오는 정수부분을 순서대로 나열하면 2진법으로 표기된 소수가 된다.

 

[주의!] 10진수 0.1의 2진수 변환 = 무한소수

0.0001100110011...

컴퓨터는 무한 소수들을 모두 메모리에 나타낼 수 없기 때문에 일정 부분만 잘라서 메모리에 보관하게 된다. 따라서 필연적으로 오차가 발생하게 된다.

 

 

 

3. 보수

여기서 보수는 2의 보수를 말한다.

핵심은 오버플로우(생략)를 이용한 보수 더하기뺄셈을 사용할 수 있게 되는 것이다.

 

[참고] 2의 보수를 제안 한 것은 폰노이만이다.


1단계 : 1100 - 0011

2단계 : 1100 - 0011 + 10000 - 10000 ( 0 )

  • +10000 - 10000은 0 이기 때문에 사용해도 상관이 없다.

3단계 : 1100 + 1101 - 10000

  • 10000을 먼저 사용 함으로써 -0011은 1101을 더하기로 사용할 수 있게 된다.

4단계 : 11001 - 10000 ( 오버플로우로 앞의 자리 각자 생략 )

  • 그리고 이후 나오는 캐리는 어차피 빼줘야 한다.

5단계 : 1001

  • 1100 - 0011을 다른 방식으로 표현하면 1100 + (-0011) 보수화 더하기를 하여 나중에 캐리 생략할 수 있게 되는 것이다.

오버플로우(생략)를 이용하면 음수를 보수로 표현할 수 있다.

  • 2의 보수는 음수를 한 개 더 표현할 수 있다.
    • char   =>   -128 ~ +127
    • 음수 갯수 = 0 + 양수 갯수

 

1) '10진수'를 '음수'로 변환하는 방법

  1. 10진수 => 2진수로 변환
  2. 보수
  3. 더하기 1
  • [확인 방법] 음수와 반대 양수를 더하면 0이 되는지 확인 ex) -5 + (+5) = 0
  • [장점] '2의 보수' 정수 표현법에서 -0과 0은 같다!
    • '1의 보수'만 사용할 경우 -0, 0은 1111,0000 으로 표현 될 수 있다.

 

 

2) '음수'를 '10진수'로 변환하는 방법

  1. 음수 여부 확인 - 2진수 맨 앞자리 숫자
  2. 보수
  3. 더하기 1
  4. 10진수 => 2진수로 변환
  5. 마이너스 여부에 따라 붙이기

 

 

 

참고

오제이튜브 💻 컴퓨터의 실체 https://www.youtube.com/playlist?list=PLz--ENLG_8TNmXT0BY43eSLlFCcQDDqyA
홍정모 C언어[따배씨] 초반 부분 https://www.youtube.com/playlist?list=PLNfg4W25Tapyl6ahul_8VS_8Tx3_egcTI
종합 CS개론(입문 - 개론/메모리/보수/문자) https://www.youtube.com/playlist?list=PLetkvXWioaD3eBJZrgBayT-SfUdV9SroK
뉴렉처 프로그래밍 학습 가이드 목록 https://www.youtube.com/playlist?list=PLq8wAnVUcTFVWq7BUX9kz1mdoeQKEcL9Q
뉴렉처 컴퓨터 프로그래밍을 하기 위한 사전지식 https://www.youtube.com/playlist?list=PLq8wAnVUcTFXna0fCAsElIj2qayRqvGjk
Tucker Programming 컴맹을 위한 Go 언어 기초 프로그래밍 기초 강좌 ( 1~6강 까지 ) https://www.youtube.com/playlist?list=PLy-g2fnSzUTAaDcLW7hpq0e8Jlt7Zfgd6
널널한 개발자 넓고 얕게 외워서 컴공 전공자 되기 https://www.inflearn.com/course/%EB%84%93%EA%B3%A0%EC%96%95%EA%B2%8C-%EC%BB%B4%EA%B3%B5-%EC%A0%84%EA%B3%B5%EC%9E%90/dashboard
반응형