8진법

덤프버전 :

분류





1. 개요
2. 표현법
3. 사용처
4. 여담


1. 개요[편집]


/ octal
숫자를 표현하기 위해 쓰는 진법 방식. 외국에선 줄여서 Oct 라고도 부른다.

컴퓨터를 포함한 전자기기 분야를 깊게 파고드는 사람이라면 모를 수가 없는 표현방식이다. 다른 진수는 'base N'으로 쓰더라도 2진수, 8진수, 10진수, 16진수 4개는 꼬박꼬박 전용 표현(binary, octal, decimal, hexadecimal)을 써 준다. 8진수, 16진수는 2진수의 가독성 향상을 위한 툴이므로 2진수와 다를 게 없다. 따라서 사실상 2개다.

물론 컴퓨터 분야에서만 쓰이는 것은 아니며 일상 언어에서 8진법을 사용하는 곳도 있었다.

2. 표현법[편집]


자릿수 하나가 0부터 7까지 표현할 수 있다. 8부터는 10, 9는 11, 10은 12...하는 식으로 표기한다. 따라서 별도로 표기하지 않으면 10진법과 잘 구분이 안 된다. 컴퓨터 초창기에 많이 썼는데 점차 안 쓰게 된 이유가 이것이다. 그레이스 호퍼는 젊은 시절 자꾸 세금 계산이 틀려서 왜 그런가 봤더니 10진법 대신 자기도 모르게 익숙한 8진법을 썼기 때문이었다는 일화도 있다. 알파벳 기호가 들어가서 직관적으로 알 수 있는 16진법에 비해 쓰기 불편하다.

보통 숫자 뒤에 (8) 또는 알파벳 o를 붙여서 표시한다. 혼란을 막기 위해 1=l, 2=s, 3=n, 4=m, 5=t, 6=f, 7=u, 0=o 하는 식으로 알파벳으로 표기하는 방법도 있다. 물론 보면 알다시피 숫자보다 더 불편하니 쓰는 사람이 없다.

8진법을 컴퓨터 분야에서 쓰는 이유는 8진수 자릿수 하나가 23을 표현할 수 있어서 2진수를 직관적으로 빠르게 변환 가능하고, 16진수에 비해 사람이 계산하기 간편하기 때문이다. 이는 프로그래밍할 때 사람이 비트까지 고려해야 했던 초창기 컴퓨터에선 긴요했다. 다만 자릿수 하나가 1바이트에 정확히 대응하지 않기에 이후 주된 숫자 표현법을 16진법에 물려주게 된다.
  • 8진법을 2진법으로 바로 변환하려면 각 자릿수를 2진법으로 변환하면 된다.
예를 들면 7148은 111(7) 001(1) 100(4)처럼 끊어서 변환한 다음 전부 붙여주고 앞의 0을 떼준 뒤 1110011002로 적으면 된다.
  • 반대로 2진법을 8진법으로 바로 변환하려면 1의 자리에서부터 3개씩 끊어서 8진법으로 변환해주면 된다.
101111010112를 (0)10 111 101 011로 끊어주고 각각 변환하면 27538이 된다.

3. 사용처[편집]



3.1. 컴퓨터공학과[편집]


간혹가다 코어한 개발자들이 에디터 프로그램에 변환기능을 넣는 경우도 있다.

윈도우 기본제공 계산기에도 8진수 변환 기능이 있다. XP 이전의 옛 계산기엔 공학용 기능에 통합되어 있지만 비스타 이후 계산기부터는 프로그래머용 계산기로 따로 분화되어 나왔다.

UNIX의 파일 액세스 권한 설정을 8진법으로 표기한다. 유닉스의 파일 액세스 권한은 소유자, 그룹, 외부인 각각에 대해 읽기, 쓰기, 실행 권한을 지정할 수 있는데 읽기, 쓰기, 실행 권한 3비트를 8진수 하나로 묶어서 표기한다. 예를 들어 권한 751은 rwxr-x--x 를 뜻하는데 파일 소유자는 읽기, 쓰기, 실행 권한 모두를 갖고 파일의 그룹 구성원에겐 읽기와 실행, 그 외의 사용자에겐 실행 권한만을 준다는 의미이다.

3.2. 유키[편집]


아메리카 원주민캘리포니아 지역에 살던 유키 족은 특이하게도 8진법을 사용한다.

거의 대부분의 언어에서 손가락 갯수에 맞춰 10진법을 사용하는 것과 비교하면 상당히 특이한데, 이에 대해 유키족은 '손가락 사이의 벌린 틈'을 이용해서 숫자를 셌다는 것이 정설이다.

그러나 유키족 언어는 1983년 마지막 구사자가 사망하며 소멸되었고 현재 살아있는 500여명의 유키족은 유키 언어를 구사하지 못하기에 현재 지구상에 일상 언어로 8진법을 쓰는 곳은 없다.

만일 유키족이 문명을 발전시켜 현대까지 살아남았다면 컴퓨터공학에 특출난 민족이 되었을 수도 있을 것이다.


4. 여담[편집]


C에선 8진수 표기를 숫자 앞에 0(숫자 0)을 붙이는 걸로 정했다. 그래서 C언어에선 숫자의 자릿수를 맞추려고 0이란 패딩값을 못 쓴다.
int a = 12345;
int b = 01234;

이걸 사람은 당연히 b값을 1234라고 생각하지만, 컴파일러는 저걸 8진수로 해석해서 10진수 668[1]이란 값을 변수에 할당한다. C언어를 쓸 때 조심해야 하는 부분 중 하나.

특히 이런 경우엔 정말 못 알아본다.
#include <stdio.h>
int main(void)
{
  int a[3] = {001, 010, 100};
  printf("%d %d %d", a[0], a[1], a[2]);
  return 0;
}

8진법에서는 7의 배수를 구하기 쉽다. 8진법에서 각 자릿수의 합이 7의 배수이면 그 수는 7의 배수이다. 10진법에서의 9의 배수 판정법, n진법에서의 (n-1)의 배수 판정법과 같은 원리.

공돌이들이 크리스마스(12월 25일)와 할로윈(10월 31일)을 헷갈려 한다는 공대개그가 있다. 12월 25일은 Dec 25인데 Dec는 10진법을 뜻하고, 10월 31일은 Oct 31인데 Oct는 8진법을 의미하며 8진법으로 31은 10진법의 25와 같기 때문.[2]

아바타 시리즈에 등장하는 외계인 나비는 손가락이 한 손에 4개씩 8개이며 따라서 자연스럽게 8진법을 사용한다고 설정되어 있다.



파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2023-10-19 10:59:18에 나무위키 8진법 문서에서 가져왔습니다.

[1] 1*83+2*82+3*81+4*80=512+128+24+4=668[2] Oct는 10월(October), Dec는 12월의 준말이기도 한데, 각각 숫자 8과 10이라는 어원과 완전히 관련없는 것은 아니다. 과거 로마 달력은 1년에 10개월이었는데, 이후 January와 Febuary가 추가되면서 12개월이 되면서 실제 어원보다 두 달 뒤로 밀린 것이다.

관련 문서