바이너리의 단점

마지막 업데이트: 2022년 6월 9일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
https://www.tutorialspoint.com/computer_logical_organization/binary_codes.htm

바이너리의 단점

source : 이웅모, 자바스크립트 Deep Dive

- 코드가 실행되기 전 단계인 컴파일 타임에 소스코드 전체를 한번에 머신 코드로 변환한 후 실행한다.

CPU가 바로 실행할 수 있는 기계어

- 컴파일 단계와 실행 단계가 분리되어 있다.

명시적인 컴파일 단계를 거치고, 명시적으로 실행 파일을 실행한다.

- 실행에 앞서 컴파일은 단 한번 수행된다.

- 컴파일과 실행 단계가 분리되어 있으므로 코드 실행 속도가 빠르다.

- 코드가 실행되는 단계인 런타임에 문 단위로 한 줄씩 중간코드인 바이트코드로 변환한 후 실행한다.

특정한 하드웨어가 아니라 가상 바이너리의 단점 머신에서 실행하도록 만든 바이너리 코드

- 실행 파일을 생성하지 않는다.

- 인터프리터 단계와 실행 단계가 분리되어 있지 않다.

인터프리터는 한 줄씩 바이트코드로 변환하고 즉시 실행한다.

- 코드가 실행될 때마다 인터프리트 과정이 반복 수행된다.

- 인터프리트 단계와 실행 단계가 분리되어 있지 않고 반복 수행되므로 코드 실행 속도가 비교적 느리다.

A script is a program or sequence of instructions that is interpreted or carried out by another program rather than by the computer processor(as a compiled program is ).

In general, script languages are easier and faster to code in than the more structured and compiled languages such as C and C++. However, a script takes longer to run than a compiled program since each instruction is being handled by another program first ( requiring additional instructions) rather than directly by the basic instruction processor.

* 자바스크립트는 일반적으로 인터프리터 언어로 구분한다.

런타임에 컴파일(일부 소스 컴파일)되며 실행파일이 생성되지 않고 인터프리터의 도움 없이 실행할 수 없기 때문.

그러나 모던 자바스크립트 엔진(크롬의 V8, 파이어폭스의 SpiderMonkey, 사파리의 JavaScriptCore, 마이크로소프트 엣지의 Chakra 등)은 인터프리터와 컴파일러의 장점을 결합해 비교적 처리 속도가 느린 인터프리터의 단점을 해결했다.

ScienceON Chatbot

바이너리 코드 수준에서 정적인 프로그램 분석을 수행한다. 소스 코드가 아닌 바이너리 코드 수준에서 분석을 수행하는 이유는 일반적으로 로컬 컴퓨터에 설치하는 실행 파일은 소스 코드 없이 단지 바이너리로 된 실행 파일만 주어지는 경우가 대부분이기 때문이다. 또한 정적으로 분석을 수행하려는 이유는 정적인 제어 흐름 분석을 통해 프로그램이 수행 시 어떤 동작을 수행하게 될지를 수행 전에 파악하기 위해서이다. 본 논문에서는 바이너리 실행 파일로부터 함수간의 실행 순서 및 제어 흐름 등의 정보를 표현할 수 있는 실행 흐름 그래프를 작성하여 사용자가 바이너리 파일의 실행 흐름과 위험한 함수의 호출 여부를 동시에 파악할 수 있도록 하며, 그래프를 통해 바이너리 파일의 분석을 용이하게 한다. 또한 실행 흐름에 대한 자동 탐색 방법을 제공하여 수행될 프로그램의 안전성을 보장하고, 수행 전에 외부에서 다운받아 설치할 프로그램이 안전한지를 판단할 수 있도록 한다.

Abstract

We perform static program analysis for the binary code. The reason you want to analyze at the level of binary code, installed on your local computer, run the executable file without source code. And the reason we want to perform static analysis, static program analysis is to understand what actions to perform on your local computer. In this paper, execution flow graph representing information such as the execution order among functions and the flow of control is generated. Using graph, User can find execution flow of binary file and calls of insecure functions at the same time, and the graph should facilitate the analysis of binary files. In addition, program to be run is ensured the safety by providing an automated way to search the flow of execution, and program to be downloaded and installed from outside is determined whether safe before running.

PE_VIEWER라 불리는 이 도구는 PE 파일 형식의 실행 파일을 읽어 각각의 구조들을 바이너리의 단점 찾아 내용을 보여주는 역할을 수행한다. 즉, 개발된 PE_VIEWER에서는 바이너리로된 정보들을 각 구성별로 추출한 후 각각의 정보를 헥사 형식으로 변경해 출력한다.

실행 시간에만 정확히 알 수 있는 메모리에 대한 사용이나 사용자의 입력에 대해 분석을 수행하여 정확한 분석이 수행된다. 그러나 동적 프로그램 분석은 실제 프로그램을 실행하여 수행되므로 실행 시간에 안전성이 중요하게 생각되는 프로그램에 적용하기에는 위험하다는 단점이 존재한다.

첫째, 소스코드 수준의 분석은 컴파일러가 하는 일에는 신경을 쓰지 않는다. 따라서 컴파일 과정 중 포함되는 정적 라이브러리나 프로그램이 실행될 때 동적으로 호출하는 DLL등에 대해서는 고려할 수가 없다. 둘째, 컴파일러의 최적화 과정 중 머신에 따라 코드가 변형되는 경우나 여러 프로그래밍 언어로 작성된 프로그램일 경우에도 문제가 발생할 수 있다. 셋째, 보안 문제를 해결하기 위해 바이너리의 단점 웜이나 바이러스 같은 코드를 분석하는 경우에는 일반적으로 소스 코드가 존재 하지 않기 때문에 이러한 경우에는 소스 코드 수준의 분석이 불가능하다

일반적으로 많이 수행하는 소스 코드 수준 분석은 분석 후 취약점이 발생 시 프로그램의 수정이 용이하다는 장점이 존재 하지만 바이너리 코드 분석과 비교하면 다음과 같은 몇 가지 단점이 존재한다[7]. 첫째, 소스코드 수준의 분석은 컴파일러가 하는 일에는 신경을 쓰지 않는다. 따라서 컴파일 과정 중 포함되는 정적 라이브러리나 프로그램이 실행될 때 동적으로 호출하는 DLL등에 대해서는 고려할 수가 없다. 둘째, 컴파일러의 최적화 과정 중 머신에 따라 코드가 변형되는 경우나 여러 프로그래밍 언어로 작성된 프로그램일 경우에도 문제가 발생할 수 있다. 셋째, 보안 문제를 해결하기 위해 웜이나 바이러스 같은 코드를 분석하는 경우에는 일반적으로 소스 코드가 존재 하지 않기 때문에 이러한 경우에는 소스 코드 수준의 분석이 불가능하다.

저자의 다른 논문

참고문헌 (14)

  1. 1. C. Cifuentes and K. John, “Decompilation of binary programs,” Software Practice & Experience, Vol.25, Issue 7, pp.811-829, 1995. 상세보기
  2. 2. C. Kruegel, W. Robertson, F. Valeur, and G. Vigna, "Static disassembly of obfuscated binaries," Proceedings of the 13th conference on USENIX Security Symposium, pp.18-18, 2004.
  3. 3. A. Lanzi, L. Martignoni, M. Monga, and R. Paleari, "A Smart Fuzzer 바이너리의 단점 for x86 Executables," Proceedings of the Third International Workshop on Software Engineering for Secure Systems, pp.1-7, 2007.
  4. 4. G. Balakrishnan, T. Reps, D. Melski, and T. Teitelbaum, "WYSINWYX: What You See Is Not What You eXecute," In IFIP Working Conference on Verified Software: Theories, Tools, Experiments, 2005.
  5. 5. M. Cova, V. Felmetsger, G. Banks, and G. Vigna, "Static Detection of Vulnerabilities in x86 Executables," In Proceedings of the Annual Computer Security Applications Conference (ACSAC), 2006.
  6. 6. M. D. Ernst. "Static and Dynamic Analysis:Synergy and Duality," In WODA 2003: ICSE Workshop on Dynamic Analysis, Portland, OR, May 9, 2003.
  7. 7. B. Schwarz, S. K. Debray, and G. R. Andrews, "Disassembly of Executable Code Revisited," In 9th Working Conference on Reverse Engineering (WCRE), pp.45?54, IEEE Computer Society, 2002.
  8. 8. G. Snelting, T. Robschink, and J. Krinke. "Efficient path conditions in dependence graphs for software safety analysis," ACM Trans. Softw. Eng. Methodol. Vol.15, No.4, pp.410-457, 2006. 상세보기
  9. 9. Microsoft Corporation, Microsoft Portable Executable and Common Object File Format Specification, Microsoft Corporation, Rev.8.1, 2008.
  10. 10. Intel Corporation, Intel $^>$ 64 and IA-32 Architectures Software Developer's Manual Volume 2B: Instruction Set Reference, N-Z, Intel Corporation, March 2010.
  11. 11. http://www.eclipse.org
  12. 12. http://www.jgraph.com
  13. 13. http://www.ollydbg.de
  14. 14. http://www.hex-rays.com/idapro

이 논문을 인용한 문헌

궁금한 사항이나 기타 의견이 있으시면 남겨주세요.

  • ScienceON : 원문보기
  • KCI : KCI 원문보기
  • DOI : 10.5392/JKCA.2010.10.5.070 [무료]
  • Korea Open Access Journals : 저널
  • DBPia : 저널

원문 PDF 파일 및 링크정보가 존재하지 않을 경우 KISTI DDS 시스템에서 제공하는 원문복사서비스를 사용할 수 있습니다. (원문복사서비스 안내 바로 가기)

바이너리 코드

코딩에서 숫자, 문자 또는 단어가 특정 기호 그룹으로 표시 될 때 숫자, 문자 또는 단어가 인코딩되고 있다고합니다. 기호 그룹을 코드라고합니다. 디지털 데이터는 바이너리 비트 그룹으로 표현, 저장 및 전송됩니다. 이 그룹은binary code. 이진 코드는 숫자와 영숫자로 표시됩니다.

바이너리 코드의 장점

다음은 바이너리 코드가 제공하는 장점 목록입니다.

이진 코드는 컴퓨터 응용 프로그램에 적합합니다.

바이너리 코드는 디지털 통신에 적합합니다.

이진 코드를 사용하면 이진 코드는 디지털 회로를 분석하고 설계합니다.

0 & 1 만 사용하므로 구현이 용이합니다.

이진 코드의 분류

코드는 크게 다음 네 가지 범주로 분류됩니다.

  • 가중 코드
  • 비가 중 코드
  • 이진 코드 십진수 코드
  • 영숫자 코드
  • 코드 감지 오류
  • 오류 수정 코드

가중 코드

가중 이진 코드는 위치 가중치 원칙을 따르는 이진 코드입니다. 숫자의 각 위치는 특정 가중치를 나타냅니다. 코드의 여러 시스템이 10 진수 0에서 9까지를 표현하는 데 사용됩니다.이 코드에서 각 10 진수는 4 비트 그룹으로 표시됩니다.

비가 중 코드

이 유형의 2 진 코드에서는 위치 가중치가 지정되지 않습니다. 가중치가 적용되지 않은 코드의 예는 Excess-3 코드와 그레이 코드입니다.

초과 -3 코드

Excess-3 코드는 XS-3 코드라고도합니다. 십진수를 표현하는 데 사용되는 가중치가없는 코드입니다. Excess-3 코드 단어는 8421의 각 코드 단어에 (0011) 2 또는 (3) 10을 추가하는 8421 BCD 코드 단어에서 파생됩니다. 초과 -3 코드는 다음과 같이 구합니다.

그레이 코드

가중치가 적용되지 않은 코드이며 산술 코드가 아닙니다. 이는 비트 위치에 지정된 특정 가중치가 없음을 의미합니다. 그림과 같이 10 진수가 증가 할 때마다 1 비트 만 변경되는 매우 특별한 기능이 있습니다. 한 번에 하나의 비트 만 변경되므로 그레이 코드를 단위 거리 코드라고합니다. 회색 코드는 순환 코드입니다. 회색 코드는 산술 연산에 사용할 수 없습니다.

그레이 코드 적용

회색 코드는 샤프트 위치 인코더에서 널리 사용됩니다.

샤프트 위치 인코더는 샤프트의 각도 위치를 나타내는 코드 워드를 생성합니다.

BCD (Binary Coded Decimal) 코드

이 코드에서 각 십진수는 4 비트 이진수로 표시됩니다. BCD는 각 십진수를 이진 코드로 표현하는 방법입니다. BCD에서는 4 비트로 16 개의 숫자 (0000 ~ 1111)를 나타낼 수 있습니다. 그러나 BCD 코드에서는 이들 중 처음 10 개만 사용됩니다 (0000 ~ 1001). 나머지 6 개의 코드 조합, 즉 1010 ~ 1111은 BCD에서 유효하지 않습니다.

BCD 코드의 장점

  • 십진법과 매우 유사합니다.
  • 십진수 0에서 9까지만 이진수에 해당하는 것을 기억하면됩니다.

BCD 코드의 단점

BCD의 더하기와 빼기에는 다른 규칙이 있습니다.

BCD 산술은 조금 더 복잡합니다.

BCD는 십진수를 나타 내기 위해 이진수보다 더 많은 비트 수가 필요합니다. 따라서 BCD는 바이너리보다 덜 효율적입니다.

영숫자 코드

이진 숫자 또는 비트는 '0'또는 '1'상태가 두 개뿐이므로 두 개의 기호 만 나타낼 수 있습니다. 그러나 이것은 통신을 위해 더 많은 기호가 필요하기 때문에 바이너리의 단점 두 컴퓨터 간의 통신에는 충분하지 않습니다. 이 기호는 대문자와 소문자, 0에서 9 사이의 숫자, 구두점 및 기타 기호로 26 개의 알파벳을 나타 내기 위해 필요합니다.

영숫자 코드는 숫자와 영문자를 나타내는 코드입니다. 대부분 이러한 코드는 정보 전달에 필요한 기호 및 다양한 지침과 같은 다른 문자를 나타냅니다. 영숫자 코드는 최소한 10 자리 알파벳 26 자 (총 36 개 항목)를 나타내야합니다. 다음 세 개의 영숫자 코드는 데이터 표현에 매우 일반적으로 사용됩니다.

  • 정보 교환을위한 미국 표준 코드 (ASCII).
  • EBCDIC (Extended Binary Coded Decimal Interchange Code).
  • 5 비트 Baudot 코드.

ASCII 코드는 7 비트 코드이고 EBCDIC는 8 비트 코드입니다. ASCII 코드는 전 세계적으로 더 일반적으로 사용되는 반면 EBCDIC는 주로 대형 IBM 컴퓨터에서 사용됩니다.

바이너리의 단점

안녕하세요~ 오늘은 BCD코드에 대해서 포스팅을 해보려고 합니다.

2. 왜 8421코드란 이름이 붙었는가?

BCD Code란?

BCD는 'Binary Coded Decimal'의 약자로 이걸 해석하면 '이진화 십진법'이예요. 직독직해하면 십진수처럼 코딩된 이진수, 말이 좀 어렵죠? BCD코드는 8421코드라는 다른 말도 가지고 있습니다.

여러분들 알다시피, 컴퓨터는 0 또는 1, 요 두 글자만 사용해서 모든걸 표현해요.

우리는 10진수를 써서 수를 표현한다면, 컴퓨터의 세계는 2진수인거죠.

그런데 이 2진수는 사람이 보기 매우매우 불편합니다. 그래서 사람이 보는 화면에는 십진수로 보여주고, 내부적으로 이 10진수 값을 2진수로 바꿔서 사용해야해요. 반대로도 마찬가지! 이진수로 컴퓨터에서 투닥투닥 필요한 연산을 수행한 다음에, 결과를 다시 십진수로 변환해 사람에게 보여주는 프로세스를 거쳐야해요.

그럼 우리가 사용하고 있는 10진수를 어떻게 2진수로 표현할까? 다양한 방법론이 있는데 그 중 하나가 BCD코드입니다.

현재 데이터 통신에는 ASCII코드가 가장 많이 사용되고 있었으나, 컴퓨터 초창기때에는 BCD코드를 사용했었어요.

그렇다고 지금 안쓰나?? 그렇지 않습니다. BCD만의 특별한 이점들 때문에 현재도 종종 필요에 따라 사용됩니다. (이는 아래에서 살펴보도록 해요) 또 초창기에는 숫자에 관련된 부분만 고안되었지만(?) 추후 문자등 더 많은 데이터를 표현할 수 있도록 여러 방법으로 확장되었습니다.

BCD변환법

BCD코드는 10진수 자리수마다 1=1매칭해서 2진수로 변환하는걸말해요. 따라서 BCD코드는 10개의 코드만 갖고 있습니다.(0부터 9까지!) 따라서 필요한 bit는 4bit입니다.

2진법과 BCD코드의 두드러진 차이점은 10부터 확 차이가 나요.

[8bit 기준 바이너리코드와 BCD코드 비교]

10진수 Binary BCD코드
0 0000 0000 0000 0000
1 0000 0001 0000 0001
2 0000 0010 0000 0010
3 0000 0011 0000 0011
4 0000 0100 0000 0100
5 0000 0101 0000 0101
6 0000 0110 0000 0110
7 0000 0111 0000 0111
8 0000 1000 0000 1000
9 0000 1001 0000 1001
10 0000 1010 0001 0000
11 0000 1011 0001 0001
12 0000 1100 0001 0010
13 0000 1101 0001 0011

BCD는 하나의 자리수를 표현하는데 4bit를 쓰죠. 근데 4bit로 만들 수 있는 가짓수는 총 16개예요.

십진수 기수는 총 10개이므로 10부터 15에 해당하는 남은 6개의 표현값은 BCD에서 쓰이지 않습니다.

[4bit만으로 표현할 수 있는 코드]

4bits BCD코드
0000 0을 표현하는데 사용
0001 1을 표현하는데 사용
0010 2을 표현하는데 사용
0011 3을 표현하는데 사용
0100 4을 표현하는데 사용
0101 5을 표현하는데 사용
0110 6을 표현하는데 사용
0111 7을 표현하는데 사용
1000 8을 표현하는데 사용
1001 9을 표현하는데 사용
1010 사용안함
1011 사용안함
1100 사용안함
1101 사용안함
1110 사용안함
1111 사용안함

8421코드?

BCD코드를 구성하는 수는 그 위치에 따라서 가중치를 가집니다. 각 자리수마다 8,4,2,1가중치를 갖기 때문에 BCD코드는 8421코드라고도 불려요.

0011의 BCD코드를 10진수로 변환하려면 어떻게 해야 하나? 각 자리수가 8421가중치를 가지고 있으므로 1이 있는데만 가중치를 더해주면 됩니다.

BCD를 10진수로 변환

왜 굳이 8421코드라 불르나, 다른 가중치 방법이 나왔으니까 이런 이름이 붙었겠죠!? 비교를 위해서죠 뭐 (ex 5421코드 등)

https://www.tutorialspoint.com/computer_logical_organization/binary_codes.htm

암튼 8421코드는 BCD코드의 다른 이름이라는거 ~

BCD코드 가산법

바이너리코드가 아닌 BCD코드를 사용하게 되면 2진 가산법을 그대로 적용하지 못하는 문제점이 바이너리의 단점 있어요. 이게 무엇인지 보고 어떻게 해결했는지 확인해봅시다. 즉! 이진법처럼 계산하시면 안돼요! 13+7을 예시로 볼게요.

출처: http://blog.naver.com/PostView.nhn?blogId=cni1577&logNo=221580366043&parentCategoryNo=&categoryNo=35&viewDate=&isShowPopularPosts=true&from=search

왼쪽은 10진수 13+7 계산법이고

오른쪽은 이를 BCD코드로 구현한 뒤 이진법처럼 계산한 모습입니다.

그런데 BCD코드에 1010이 있었나요. ㄴㄴ , [4bit만으로 표현할 수 있는 코드]부분 올라가서 보고 오시면 1010은 사용하지 않아요.

그럼 BCD코드를 할 때 어떻게 해야할까요?

9를 넘어선 값이 나오면 6에 해당하는 0110을 더해줘야 해요. [왼쪽 그림 참고]

왜 6을 더해줄까요?? 그건 이진수 특징인 4bits가 16가짓수이고, 10진수는 10개의 값만 가지기 때문에 carry를 넘기기 위해서는 6을 더해서 순환시켜줘야 하기 때문이예요.

0110(2)을 더해줘야 하는 원리 자세히 설명하기

[십진수개념에서 생각해보자: 3+7=10인 이유 분석해보기]

자, 3+7을 계산하면 캐리 1이 발생하고 나머지가 0이 남습니다. 그래서 3+7=10이 되는거예요. 즉 10은 캐리와 나머지의 조합이다.

보면 캐리가 발생하면 다음 기수로 넘어가게 돼요. 왜냐!! 10진법은 표현할 수 있는 범위가 0~9까지이기 때문 즉, 하나의 기수에 10을 표현할 수 없기 때문이예요.

[BCD개념에서 생각해보자]

8421코드도 마찬가지입니다. 이진수이긴 하지만 10진수처럼 코딩되어 있다고 했죠?? 얘도 표현할 수 있는게 0~9까지라 했어요.

자 더했더니 10 이 됐어요. 그럼 기수를 하나 넘기고 0이 되어야겠죠. 근데 이진수처럼 계산했더니 값이 1010이 나왔어요. 얘는 BCD코드에서 사용할 수 없죠. 표현할 수 있는 기수가 아닙니다. 따라서 0000으로 초기화되고 캐리로 1을 넘겨줘야겠죠

(값이 10이므로 딱 떨어져 나머지가 0이므로)

BCD코드의 처음인 0000이 됐어요. 이게 다시 처음으로 돌아가려면 몇을 더해줘야 할까요? 즉 순환하려면 어떻게 계산되어야할까요? 4bit의 특징을 생각해봅시다. 0000-> 0001-> 0010 -> 0011..등의 16개 가짓수를 다 돌아야 다시 0000부터 반복되겠죠.(순서대로 1씩 더해보세요 1111 +1 이 되어야 1+0000이 되어 뒤의 4bit가 다시 0000이 되겠죠?) 우리가 16가짓수 중10개만 사용하니까 다시 되돌아가라면 6을 더해줘야 순환이 됩니다. 따라서 사용하지 않는 값이 나오면 6을 더해주어야 제대로 된 계산이 되는거예요. (잘 설명을 했는지 모르겠네요 ㅎㅎ ㅋㅋ)

연습문제를 보는게 계산하는 법을 이해하는게 더 빠를수도!

17+46 출처: http://blog.naver.com/PostView.nhn?blogId=cni1577&logNo=221580366043&parentCategoryNo=&categoryNo=35&viewDate=&isShowPopularPosts=true&from=search

BCD코드 특징

바이너리코드와 BCD코드의 차이점을 명확히 보기 위해 예시를 들어봅시다.

방법 표현 크기
BCD코드 변환시 0001 1000 0101 12bit
바이너리코드 변환시 1011 1001 8bit

장점1: 같은 수 체계로 유저에게 친숙

자 표현만 봤을 때 바이너리코드(1011 1001)의 경우 해당 값이 185라는걸 한번에 알 수 있겠나요??

계산을 일일이 해봐야 알 수 있어요. 10진수처럼 표현되기 때문에 사람들에게 더 친숙합니다.

장점2: 하드웨어적 구현이 굳

그리고 하드웨어 알고리즘 적으로 BCD변환기는 다른 알고리즘에 비해 구현하기 심플합니다)

자리수에 해당하는 변환기하나만 있으면 되기 때문에 사람들에게 입력을 받고 또 이를 보여주는 DISPLAY하는 데에 효율적입니다.

장점3: 따라서 사용자에게 입력받고 보여줄때 효율적

컴퓨터에서는 대게의 사용자가 BCD코드 형태로 데이터를 입력하며 이 코드가 컴퓨터 내부에서 2진수로 변환되어 저장과 연산이 시행 되도록 도와줘요. BCD 표현 방식의 장점으로는 수의 크기에 제한없이 자릿 수가 증가 할 마다. 새로 4비트만 더 부가 하면 된다는거.

장점4: ASCII보다 차지하는 크기가 작음.

단점1: 바이너리보다 차지하는 크기가 큼

또 크기를 보면 바이너리는 8bits인데 BCD는 12bits로 더 많은 bit를 사용합니다. 따라서 바이너리보다 high speed를 내기 어려워요.

하지만 현재 가장 많이 사용되는 ASCII코드는 1문자당, 8bits나 차지해요. 즉 185면 8*3해서 24bits! 근데 BCD는 한 문자당 4bits만 차지하니까 ASCII보다 반이나 줄게 됩니다. (1/2배)

이 특징 때문에, 현재 데이터 전송시에, 많은 데이터를 함축적으로 보내려고 ASCII -> BCD변환을 사용하기도 합니다.

장점5: 정확한 소숫점 표현

10진수 0.2를 binary code로 표현해봅시다.

그러면 0.001100110011. 의 무한한 소수값을 갖게 돼요.

그런데 이를 BCD코드로 표현하면. 0.0010으로 매우 심플하게 표현됩니다.

BCD는 부동소수점에 이점이 있기 때문에 과학적이거나 그래픽적인 계산기에서 여전히 사용됩니다.

모든 HP계산기는 BCD를 사용한다고 하네요. (2016년 검색 기준)

출처: https://www.quora.com/How-much-is-Binary-Coded-Decimal-BCD-used-these-days-and-how-important-is-it-where-it-is-used


0 개 댓글

답장을 남겨주세요