본문 바로가기
컴퓨터구조 및 자료구조

프로그래머가 이해해야하는 것 - 이진수, 십진수, 십육진수, 비트, 바이트

by 피톤치즈 2018. 10. 6.
반응형
프로그래머가 이해해야하는 것

프로그래머가 이해해야하는 것

  • 프로그래머로써 반드시 알아야 하는 것 중 숫자를 표현하는 것과 이를 컴퓨터가 어떻게 인식하는 지를 알아보고자 함.

 

여러가지 진수 이해하기

  • 프로그램을 공부하다 보면 십진수, 이진수, 십육진수 등이 나옴.

십진수? 이진수? 십육진수?

  • 우선 이것을 이해하기 전에 언제인지 모르겠지만 이진법(2진법), 팔진법(8진법), 십진법(10진법)에 대해서 들어도 보고 공부해본 기억이 있을 것이다. 수학시간인가 산수 시간에 배운걸로 기억이 남...
  • 여기에서 진법은...진법은 수량을 나타낼 때 몇 개를 한 묶음으로 하여 수를 나타내느냐 하는 방식을 일컫는다(출처 및 자세한 설명은 다음 링크 참조 : 다음백과 http://100.daum.net/encyclopedia/view/24XXXXX44877)
  • 이진법과 이진수를 다른 것이 아니고 같은것...그냥 수학에서는 이진법, 공학에서는 이진수로 사용하는 것 같은 느낌적인 느낌...(개인적인 생각)

 

십진수(10진수)

  • 0~9까지 표시하는 것으로 우리가 흔히 쓰는것.
  • 한자리를 이루는 것이 숫자 10개임.
  • 영어로 decimal number

 

이진수(2진수)

  • 0~1로 표시하는 것으로 주로 컴퓨터나 공학 분야에서 사용.
  • 한자리를 이루는 것이 숫자 2개임
  • 영어로 binary number

 

십육진수(16진수)

  • 0~F로 표시하는 것으로 주로 컴퓨터나 공학 분야에서 사용
  • 한자리를 이루는 것이 16개 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f
  • 영어로 hexadecimal number

 

그외

  • 숫자를 몇개를 쓰느냐에 따라서 몇 진수가 되는것.
  • 실생활에서는 연필 1다스(12개) 같은 거나 고기 1근(600g) 같은 거라고 생각하면 된다.

 

여러가지 진수 계산 및 변환

  • 같이 이해해보기 위해 동일한 수식을 사용하여 계산 방법을 표현
  • 8 + 8
  • 15 - 7

십진수 계산

  1. 8 + 8 = 16

    • 8 과 8을 더할 때, 앞 수인 8 의 다음 수부터 8번을 세야한다.
    • 2번째를 셀 때, 9 다음 수가 없기 때문에 십의 자리에 1을 쓰고 다시 0부터 시작.
    • 그래서 8번째 숫자가 6이므로 16으로 표기.
  2. 15 - 7 = 8

    • 15에서 7을 뺄 때, 15의 이전 수 부터 센다.
    • 6번째에서는 이전 수가 없으므로 십의 자리 숫자인 1을 빼고 9를 센다.
    • 그래서 7번째 숫자인 8이므로 8이 되는 것.

 

이진수 계산

  1. 기본 수식은 십진수로 나타낸 것으므로 이것을 이진수로 바꿔야 한다.

    • 8 + 8 -> 1000 + 1000
    • 15 - 7 -> 1111 - 111
  2. 1000 + 1000 = 10000

    • 0부터 8까지를 이진수로 표현하면
    • 0, 1, 10, 11, 100, 101, 110, 111, 1000 이다.
    • 여기서 1000 + 1000은 2000 이지만, 이진수 이므로 10000 이 된다.
  3. 1111 - 111 = 1000

    • 십진수 15는 이진수로 표현하면 1111 이다.
    • 십진수 7은 이진수로 표현하면 111 이다.
    • 따라서 1111 - 111 = 1000 이다.
  4. 십진수를 이진수로 바꾸는 방법

  5. 이진수를 십진수로 바꾸는 방법

 

십육진수 계산

  1. 기본 수식은 십진수로 나타낸 것으므로 이것을 십육진수로 바꿔야 한다.

    • 8 + 8 -> 8 + 8
    • 15 - 7 -> f - 7
  2. 8 + 8 = 10

    • 십육진수는 10부터 15까지 를 a, b, c, d, e, f 로 표기한다.
    • 따라서, 9 부터 8번 숫자를 센다.
    • 7번째 숫자인 f 다음은 0이므로 이때 앞에 1을 붙인다.
    • 따라서 8+8은 10이다.
  3. f - 7 = 8

    • 십진수 15는 십육진수 f 다.
    • f 이전 수인 e부터 7번째 숫자는 8이다.
    • 따라서 f-7 = 8 이다.
  4. 십진수를 십육진수로 바꾸는 방법

  5. 십육진수를 십진수로 바꾸는 방법.

 

bit와 Byte 이해하기

  • 컴퓨터나 전자, 혹은 정보통신 분야에서 사용하는 bit와 byte를 이해

 

bit (비트)

  • 컴퓨터는 기본적으로 On/Off만 인식한다.
  • 이 단위를 bit 라고 한다.
  • Off 는 0, On은 1 이라고 하면, 이 bit는 이진수의 수 표현과 같다.

 

Byte(바이트)

  • 1 Byte는 여러개의 bit로 이루어진 것.
  • 최근 들어서 1 Byte = 8 bit 라는 개념이 정립. (최근이라함은 몇년 전이라고 지정하기 어려움... 개인적으로 이 것을 들은것은 약 20년 전... 그러니까 그 이전의 언제인가 부터 정립된것으로 예상..)
  • 원래 6, 7, 8, 9, 12 bit 가 1 Byte 였으나 컴퓨터의 용량과 처리속도가 빨라지면서 8 bit로 정리된 것으로 예상.
  • 컴퓨터 부품중 RAM과 하드디스크, SSD의 용량을 표시할 때 이 Byte를 사용한다.
  • 검색을 하다보면 byte와 Byte를 혼용하는 경우가 많은데 Byte가 맞다. 이것은 bit를 줄여서 b로 표기하는데 이것과 혼돈을 없애기 위해서 B로 사용을 하므로, Byte가 맞는 표현이다.
  • 통신에서 사용하는 20 Mbps 에서 bps는 bit per sencond다. 결론적으로 20 Mbps면 실제로 우리가 생각하는 20 MB의 파일을 1초에 받을 수 있는 속도가 아니고, 20 MB의 파일은 8초가 걸리는 속도다.

 

프로그램에서의 표기

  • 정수형 변수에 초기화를 할 경우 이진수 혹은 십육진수로 값을 넣을 수 있고, 아래와 같이 표기한다.

    • int intBit = 0b1111; // 십진수 15의 이진수 표현
    • int intByte = 0x11; // 십진수 17의 십육진수 표현
  • 이진수는 0b 로 시작하여 0과 1로 표기

  • 십진수는 0x 로 시작하여 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f 로 표기, 이때 a, b, c, d, e, f는 대문자 혼용가능.

 

이진수와 십육진수의 상관관계

  • 이진수와 십육진수는 상당히 밀접한 관계가 있다.

  • 임의의 이진수가 있다. 이것을 표기시 우측부터 4개씩 끊어서 표기하면...

    1. 이진수가 11101100 (8개), 101010 (6개) 일 경우 4개씩 끊으면
    2. 1110 1100 과 10 1010 으로 표기가능.
    3. 이것을 끊은 것으로 표기하면 십진수로 각각 14, 12, 2, 10 으로 표기 된다.
    4. 뭔가 감이 오지 않는가???
  • 이진수 4개로 표시할 수 있는 십진수의 최대값은 15이고, 당연히 십육진수는 십진수 15까지 표기된다.

  • 따라서 이진수 4개씩 끊어서 표기하면 십육진수 한개로 변경이 쉽다.

  • 결론적으로 임의의 이진수 2개는 각각 아래와 같이 표기할 수 있다.

    • 0b 1110 1100 -> 0x dc
    • 0b 10 1010 -> 0x 2a
  • 이때 주의점은 오른쪽 부터 4개씩 끊어야 한다는 것.

 

꼼수

  • 진수에 대해서 확실히 이해를 했다면 이걸 쉽게 할 수 있는 방법이 있다.
  • 윈도우7과 8, 10 에는 기본적으로 계산기 프로그램이 있고, 거기에 프로그래머용으로 선택할 수 있다.
  • 그걸 선택하면 이진수, 십진수, 십육진수로 자유롭게 변경 및 계산을 할 수 있도록 해준다.
  • 꼭 이해하고 이걸 사용하길 바람....

 

본 문서는 그간 공부한 것을 토대로 필자 본인의 머리에서 나온것임.

 


반응형

댓글