왜 16 진수를 배우는가? [닫은]


28

나는 하루에 꽤 많은 인트로 프로그래밍 수업을 들었는데, 주로 내가 찾은 모든 종류의 프로그래밍에 발을 젖게 만들었습니다. 놀랍게도, 거의 모든 클래스가 하드웨어 소개, 소프트웨어 소개 등의 동일한 형식으로 실행되며 실제 프로그래밍에 들어가게됩니다. 하드웨어와 소프트웨어의 작동 방식을 이해하는 것이 매우 중요하지만, 저는 모든 과정에서 항상 하나의 주제로 혼란 스러웠습니다.

필자가 찾은 소프트웨어 소개 섹션에서 항상 이진법, 16 진법, 때로는 8 진법으로 글을 읽는 것에 중점을 둔다. 나는이 것들이 무엇인지, 그리고 컴퓨터가 그것들을 어떻게 해석하는지 이해하는 것이 좋다는 것을 이해하지만, 실제로 그 숫자 체계를 읽고 쓰는 법을 알아야 할 필요는 없다. 실제로, 기본 10 이외의 다른 것을 본 유일한 시간은 CSS의 색상에 대한 것입니다 .www.colorpicker.com과 같은 것을 사용하면 더 쉽습니다.

프로그래밍 세계에서 10이 아닌 숫자가 아닌 시스템의 훌륭한 사용법에 대해 무지한 적이 있습니까? 아니면 모든 프로그래밍 교과서에 이러한 섹션을 포함시키는 것은 오래된 전통입니까? 평균 프로그래머가 실제로 8 진수를 사용하는 위치에 대한 좋은 예가 있습니까?


1
평균 프로그래머가 실제로 8 진수를 사용하는 위치에 대한 좋은 예가 있습니까? 그렇습니다. 항공 산업과 관련된 소프트웨어를 작성하고 있다면 4 자리 8 진수 인 트랜스 폰더 코드가 나타날 수 있습니다. en.wikipedia.org/wiki/Transponder_%28aviation%29
Ben Cottrell

답변:


14

모든 답변은 훌륭하지만 내가 생각하는 가장 중요한 부분은 다루지 않습니다. 다른 기반에서 "생각"하는 법을 배우면 컴퓨터가 숫자를 처리하는 방식에 훨씬 능숙합니다.

상당히 소문자로 묶인 소문자 문자열을 저장하려면 어떻게해야합니까?

글쎄, 26 개의 소문자가 있는데, 이것은 5 비트 숫자 인 0-31의 범위로 쉽게 변환됩니다. 6 개의 5 비트 숫자를 32 비트 필드 (int?)로 압축 할 수 있으며, 남은 부분도 충분합니다. 구두점 몇 개

나는 16 진수가 이런 것들에 도움이된다고 말하는 것이 아니라 숫자가 어떻게 변환되는지 이해합니다.

또 다른 경우, 종종 ASCII에서 약간 긴 숫자를 전달하기 위해 base-64를 사용합니다. 이것을 구현하는 방법을 알고 있습니까? 왜 그렇게 구현합니까? 게임 등록 상자에 "CD KEY"를 입력 할 때마다 입력 한 내용을 알고 계셨습니까?

또한 재미를 위해베이스 12로 잠시 동안 놀아보십시오. 수학은 기본 12에서 정말 흥미로운 것으로 판명되었습니다 (기본 10은 비교에서 어리 석습니다. 우리는 6 개의 손가락으로 진화했으면 좋겠습니다. 수학 이해력에서 수십 년 앞설 수 있습니다). 매우 똑똑한 일부 초기 인간들은 시계 12를 사용하여 시계를 개발했습니다.

10 진법에는 쉬운 패턴을 만드는 3 개의 "쿨 (Cool)"숫자가 있습니다. 8, 6 및 4를 "미성년"멋진 숫자로 만듭니다. 12 진수에서는 2,3,4,6,11이 "Cool"숫자로 8,9, 10은 "Minor"차이 숫자로, 12를 사용하면 숫자 패턴을 인식하는 것이 훨씬 더 좋습니다. 우리는 항상 그들을 볼 수 있기 때문에.

또한 이진. 한 손으로 32 세까지 셀 수 있습니다. 나는 꽤 조금합니다. 때때로 5를 세면 자르지 않습니다. :)

이진은 많은 재미가 있지만 잘 번역되지 않습니다. 16 진법에 익숙해지면 "A"가 1010으로, "5"가 0101로 나타나기 시작하며, 이러한 것들이 실제로 중요해지기 시작합니다. 6 번째 비트 : 00100000을 추출하고자하는 비트 필드가 있다면, 무엇과 함께 "및"? 당신은 그것이 0x20이라는 것을 알아야합니다.

어떤 비트가 추출되고 0x0600의 코드가 보이면? 당신은 그것에 대해 생각하지 않아도 알아야합니다. 실제로 0000011000000000으로 쓰여진 것처럼 읽어야합니다 (그러나 0을 세지 않아도되기 때문에 더 읽기 쉽습니다).

왜 두뇌와 데이터 처리 능력을 제한하고 싶습니까?


실제로, 시계는 base60 에서 개발되었습니다 .
Denis de Bernardy 2016 년

@Denis 나는 현재의 이론은 그들이 손가락을 통과했다고 생각할 수없는 어리석은 사람들에게 잃어버린 열두 명의 사람들에 의해 개발되었다는 인상을 받았다. 60은 12 개 사단이 5 개 그룹으로 더 나뉘어져 있으며 기본 10 grunts에 의해 사후 해킹처럼 보입니다 :)
Bill K

아마도. 솔직히 말해서, 나는 결코 전문가가 아닙니다. 귀하의 의견은 단순히 잊혀진 기억을 되찾았습니다. 또한 360도 각도는 60도 (그리고 같은 바빌로니아 발명가들에 의해)에서 나온다는 것을 기억합니다. 그러나 당신이 지적한 것처럼 10 도수는 원래 12도 수학자였던 것보다 압도적 일 수 있습니다. :-) 자, 만약 우리가 몇몇 아메리칸 인디언처럼베이스 20을 세고 있다고 상상해보십시오. :-D
Denis de Bernardy 2016 년

44

무엇을 배우나요? 유능한 프로그래머가 되려면 다른 숫자 기반 을 이해해야 하지만 16 진수에 대해서는 ABCDEF가 9를 따랐다는 점을 제외하고는 배울 점이 거의 없습니다.


8
OP는 다른 기지에서 10 번 기지로 정신적으로 전치 할 수 있다고 언급 할 수 있습니다. 이것은 한 시점에서 유용한 기술 이었지만 특정 범주의 저급 프로그래머에게는 여전히 유용 할 수 있지만 오늘날에는 크게 관련이 없습니다. 예를 들어 vim에서 간단하게 변환을 수행 할 수 있습니다.
Rein Henrichs

맞습니다. 나는 더 분명 했어야했다.
jwegner

2
@Rein 나는 그렇게하는 데 결코 능숙하지 않았으므로 (나는 머리에서 수학을해야합니다), 말할 수 없습니다. 그러나 나는 정신적으로 16 진수에서 Z80 어셈블리 언어로 옮길 수있었습니다. 이는 당시에 할 수 있었던 유용한 일이었습니다. 나는 16 진수에서 80x86 어셈블러 (또는 무엇이든)로 바꾸는 능력이 오늘날 일하는 프로그래머에게 여전히 유용하다고 생각합니다.
Neil Butterworth

1
@Neil Butterworth : 8080 개의 opcode는 실제로 메모리가 제공된다면 8 진수로 보는 것이 더 합리적입니다. 내 기억은 그것이 Z80 확장에 어떻게 적용되는지에 대한 희미합니다.
David Thornley

1
@ Neil : 중요한 부분은 레지스터로 레지스터 이동 명령이라고 생각합니다. 비트는 01xxxyyy로 나타납니다. 여기서 xxx는 대상이며 yyy 소스입니다. 다른 8 진수 의미가 있는지 모르겠습니다.
David Thornley

18

평균 프로그래머가 실제로 8 진수를 사용하는 위치에 대한 좋은 예가 있습니까?

옥탈? * nix 권한을 제외하고는 일반적으로 아닙니다.

16 진수? 당신은 내기. 임베디드 시스템 주변에서 비트를 섞고 비트 레벨에서 프로토콜 또는 파일 형식을 보는 등 많은 사람들을 무시하고 있습니다. 그러나 응용 프로그램이나 웹 작업을 수행하는 금속에서 멀리 떨어져 있다면 쉽게 벗어날 수 있습니다.

예 : 마이크로 컨트롤러 등의 구성 레지스터.

임의로 펀치 키를 사용하여 숫자 54312를 가져옵니다. 어떤 비트가 설정되어 있는지 알 수 있습니까? 나는 적어도 내 머리 꼭대기에서 벗어날 수 없습니다. 그러면 16 진수는 0xd428입니다. 반면에, 제가보고있는 비트 패턴은 1101 0100 0010 1000이라는 것을 바로 알 수 있습니다. 그것은 이런 종류의 것들에 대해보다 논리적으로 구성되어 있으며, 금속. 위의 숫자는 MCU에서 재설정 할 때 발생하며 어떤 이유로 비트 7과 9를 설정해야한다고 가정 해 봅시다. 16 진수로 결과 숫자가 0xd6a8이어야하지만 10 진수인지 쉽게 알 수 있습니다. 저에게 물어 보면 직관적이지 않은 곳에 54952입니다. 물론, 가치에 640을 더하는 것이 문제이지만, 이해하기가 더 어렵다. 물론 실제로는 비트 단위로 올바른 위치로 이동하거나 원래 값으로 OR을 이동시킬 수 있지만 최종 표현이 무엇인지 여전히 알고 싶을 수 있습니다.


1
"어떤 비트를 설정해야합니까?" 일부 (많은? 대부분) 응용 프로그램의 경우에는 관련이 없습니다.
닐 버터 워스

10
동의-우리가 높은 수준의 개발을 이야기하고 있다고 가정합니다. 낮은 수준의 특정 비트가 설정 또는뿐 아니라 수도 지워하지만 여부를 합니다 때로는 결정하는 경우 모두에서 피 묻은 마이크로 부츠, 또는 y보다는 X의 클럭 속도로 당신이 필요로하는 특정 주변 장치의 전원을 얻는 경우에, 또는 실행하는 경우 . 그것은 시작에 불과하며, 이런 종류의 개발을 처리한다면 기본적으로 단일 비트가 중요합니다. 때때로 많이. 그러나 다시 말하지만, 그것은 당신의 도메인에 달려 있습니다. 임베디드 세계를 잊지 마십시오. =)
n42

1
+1-기계에 가까울수록 다른 받침대를 더 많이 사용해야합니다. 내장 된 것이 아닙니다. 대부분의 언어에는 비트 플래그가 있으며 명백한 이유로 16 진수로 작성됩니다. 반대로 첫 번째 프로그래밍 과정에서 가르치는 것은 무의미하지만 대부분의 첫 번째 프로그래밍 과정은 무의미합니다. 거의 모든 프로그래머가 스스로 가르칩니다?

1
@Davor : 16 진수를 읽기가 쉽기 때문입니다. 8 자리 16 진수 값을 32 자리 2 진수 값보다 훨씬 빠르게 이해할 수 있습니다.
Steve S

2
@Steve S : 솔직히 말해서, 우리가 게으른 무리이기 때문인 것 같습니다. 0x80은 0b10000000보다 쓰기가 더 짧습니다. 하지만 동의합니다. 또한 첫 번째 프로그래밍 과정에서는 크게 의미가 없지만 이산 수학, 실시간 프로그래밍, 컴퓨터 구성 등에 넣을 수도 있습니다.
n42

12

평균 프로그래머가 실제로 8 진수를 사용하는 위치에 대한 좋은 예가 있습니까?

Unix (또는 Linux)에서 파일에 대한 권한을 설정하는 경우 3 자리 8 진수를 사용합니다. 첫 번째 숫자는 사용자의 권한이고, 두 번째 숫자는 그룹의 권한이며, 마지막 숫자는 다른 사람이 얻는 권한입니다.

지난 주에 작성한 코드 에서이 사실을 이해해야했습니다.

MD5와 같은 표준 해싱 알고리즘의 출력을 보면 종종 16 진법으로 작성된 것을 알 수 있습니다. 나는 이것이 특이한 기초에서 산술로 이어지는 많은 경우를 보았습니다.

부동 소수점이 내부적으로 표현되는 방식을 이해하고 1/10이 정확하게 표현되지 않는 이유를 이해하려면 다른 기준에서 산술을 수행하는 방법을 이해해야합니다. 이것은 당신이 뒤쪽에서 당신을 물고 갑자기 서둘러 실제로 그것을 이해해야 할 때까지 밀교 지식입니다.

그리고 거기 당신이 자르기 컴퓨터의 데이터 내부의 기본 바이너리 특성을 찾을 수 있습니다 다른 경우의. 물론 CRUD 웹 사이트를 작성하는 경우 다른 사람이 이미 처리 한 수준에서 발생하기 때문에 CRUD 웹 사이트를 전혀 만나지 못할 것입니다.


4
* nix 권한은 실제 8 진이 아닙니다. 이러한 표현으로는 수학적 계산을 수행하지 않습니다. 기껏해야 그들은 이진 마스크의 8 진 표현입니다.
Joel Etherton

@Joel Etherton : 파일 통계에서 권한을 얻으면 기본적으로 10으로 표시되는 숫자로 표시됩니다. 8 진수로 /에서 변환하는 것을 이해하지 못하면 숫자를 이해하기 어렵습니다. 이 사실을 설명하는 데 필요한 설명서를 작성하고있었습니다. 많은 수학적 계산이있었습니다.
btilly

@btilly : 당신은 내가 말하는 것을 오해합니다. 파일에 대한 권한을 755로 설정하면 아무것도 추가하지 않아도됩니다. 권한 조합을 설명하는 마스크 일뿐입니다. 반드시 (4 + 2 + 1) (4 + 0 + 1) (4 + 0 + 1)을 의미한다는 것을 인식해야하지만 여전히 이진 마스크의 표현 일뿐입니다. "파일 통계"라고 할 때 무엇을 말하는 것입니까? 기본 10으로 제공되는 권한에 대한 파일 통계는 본 적이 없습니다 (해당 예를 엄격히 고수).
Joel Etherton

1
@Joel Etherton : perl -le '@stat = stat(shift); print $stat[2]' some_file기본 10의 숫자로 스탯을 얻으십시오 chmod. 같은 방식 으로 Perl에 전달해야합니다 . 따라서 데이터베이스에 숫자를 저장하는 것이 좋습니다.이 시점에서 그 숫자가 더 친숙한 Unix 권한과 어떤 관련이 있는지 문서화해야합니다. 내가 말했듯이, 이것은 가상의 예가 아닙니다.
btilly

@Joel Etherton : 권한이 419 (10 진수) 인 파일이 있다고 가정하면 파일을 사용자가 실행할 수는 있지만 세계가 읽을 수있게 만들려고합니다. 번호를 어떻게 수정해야합니까? C stat () 호출에서 반환 된 값은 정수이며 인쇄 방법은 또 다른 문제입니다.
Vatine

9

현실 세계에서 16 진법을 2 진법에서 10 진법으로 변환하는 것에 대한 퀴즈는 없을 것입니다. 원하는 방식으로 변환 할 수있는 도구가 제공됩니다.

나는 당신이 무슨 일이 일어나고 있는지 이해해야한다는 데 동의하지만, 그것을 찾을 때 왜 암기합니까?

그러나 키 번호가 많이 나올 때 키 번호 (0x64 = 100, 0xFF = 255, 0xFFFF = 65535 등)를 기억하는 것이 유용하다는 것을 알았습니다.

이진수, 16 진수 및 8 진수로 8675309가 무엇인지 알 수 있습니까? 아니요,하지만 필요할 때 할 수있는 도구를 열 수 있습니다.


3
일반적으로 const로 사용되는 57005를 잊어 버렸습니다elvis = 57005;
Bevan

5

내가 8 진수를 사용한 유일한 것은 유닉스 시스템에서의 파일 권한입니다.

16 진 및 2 진은 유선 프로토콜 또는 금속 데이터 전송에 가까운 작업을 수행하는 경우 매우 유용합니다. 기본적으로 데이터는 이진수로 흐르며 한 번에 16 진법으로 조금씩 나타납니다.

데이터 시트는 종종 16 진 값을 인용하므로 데이터 시트에 표시된대로 코드에 값을 표시하는 것이 좋습니다.

둘 중 하나를 많이 사용하면 적어도 공통 값의 경우 머리의 십진수로 변환하거나 십진수로 변환하는 데 상당히 능숙합니다.

모든 말; 나는 그 강조가 대부분 역사적이라고 생각합니다. 당신이 말했듯이 십진수 이외의 것을 거의 필요로하지 않는 프로그래머가 많이 있습니다.


5

실제로 왜 2 개의 숫자 표현의 힘을 배우는가?

컴퓨터는 회로로 구성되며 전류는 두 가지 레벨의 전류를 나타 내기 위해 높고 낮은 두 가지 레벨로 회로를 통해 흐릅니다. 우리는 하나 (높음) 또는 0 (낮음)의 두 가지 상태를 유지할 수 있기 때문에 이진수를 사용합니다.

이진수는 패턴을 형성합니다 . 1000001.을 난 이후 : 예를 들어, 당신과 내가 얘기 할 수있는 유일한 방법 경우, 회로 아웃을 통해, 우리는 당신이 나에게 문자 A를 보내려면, 당신은 내게 바이너리 패턴을 보낼 것이라는 점을 설정할 수 있습니다 게으른 , 나는 일곱 일곱 자리를 기억하고 싶지 않습니다. 오히려 큰 2 진수를 작은 숫자로 표현하기 위해 2 개의 숫자 시스템을 사용합니다. 8 (2 ^ 3) 또는 16 (2 ^ 4)을 사용할 수 있습니다.

보시다시피 대부분의 컴퓨터 하드웨어 및 소프트웨어는 이진 표현을 사용하며 8 진 및 16 진과 같은 2 가지 표현을 사용하여 이진 표현을보다 효율적이고 고통없이 읽을 수 있습니다.

이제 두 표현의 힘을 이해해야하는 평균 프로그래머의 :

  1. ASCII
  2. 유니 코드
  3. 메모리 관리 프로그래밍 이해 (스택, 힙, 메모리 주소, 코어 덤프)
  4. 디버깅
  5. 이진 데이터 읽기는 대부분 16 진 편집기에서 수행됩니다.

이제 내 마지막 2 센트, 나는 당신이 2 개의 표현의 힘을 아주 빨리 배울 수 있다고 확신합니다 (이미 소개 과정을 관리 했으므로). 당신은 변환을 잊어 버릴 수 있지만 원한다면 외국 개념이 아니어야합니다. 될 평균 프로그래머.


3

나는 8 진수를 사용한 적이 없지만 디버거에서 16 진수를 보는 것은 드문 일이 아니며 때로는 소스 코드에서 16 진수를 사용하는 것이 훨씬 더 합리적입니다 (일반적으로 기본 데이터는 비트 플래그이기 때문에).


3

요즘 많이 필요한지 모르겠지만 몇 년 전 시스템 프로그래머 였을 때 16 진수를 읽고 이해하는 것이 필수적이었습니다. 스토리지 덤프 (모두 16 진)가 제공되고 16 진 표현을 IBM Assembly 언어로 다시 디코딩합니다. 잠시 동안 그렇게 한 후에는 직접 할 수 있습니다 .16 진수를 읽고 동등한 어셈블리를 작성하십시오. 디버깅에 매우 편리합니다. 16 진수 값을 더하고 빼는 것은 기본 레지스터에서 오프셋을 계산하는 데 유용했습니다.

지금은 실제로 필요한 것이 거의 없다고 생각하지만, 그것에 대한 지식은 거의 나쁘지 않습니다.


저도 16 진수 기술을 습득했습니다. 나중에 VAX / VMS에서 기호 디버거없이 코드를 디버깅해야 할 때 예리하게되었습니다 (심볼 정보가없는 고객에게 코드를 배송했습니다). 요즘에는 특정 URL의 일부 정보를 16 진수로 인코딩하지만 가끔은 즉시 정보를 해독하는 것이 도움이되지만 거의 사용하지 않습니다.
TomG

3

이진 / 16 진수를 읽는 데 "유창한"것이 아니라 당신이 그것들을 만났을 때 신속하게 정신적 전환을 할 수있을 정도로 편안합니다. 간단한 산술에 익숙하지 않고 프로그래밍을 상상해보십시오. 2를 곱해야 할 때마다 계산기를 사용해야했습니다.

16 진 / 이진은 컴퓨터가 사용하는 언어이기 때문에 중요합니다. 특히 디버깅 연습을 수행하고 데이터가 16 진인 경우에는 항상 그 위치에서이 언어를 만나게됩니다.

또한 다른 숫자 유형이 내부적으로 표현되는 방식과 산술이 작동하는 방식에서 base-2를 이해하는 것이 중요하다는 점을 강조합니다. 이를 통해 부동 소수점 반올림 문제 및 정수 오버플로를 처리하는시기와 방법을보다 잘 파악할 수 있습니다.

하나의 예로서, 비트 연산 및 비트 플래그는 여전히 프로그래밍에서 널리 퍼져 있으며, 이것은 base-2에 대한 이해가 중요한 또 다른 장소입니다.


2

실제로 기본 10 이외의 다른 것을 본 유일한 것은 CSS의 색상입니다.

유니 코드 코드 차트 에서 문자를 찾을 필요가 없었 습니까? 포함 된 URL을 본 적이 %20없습니까? GUID를 사용한 적이 없습니까? IPv6 주소를 본 적이 없습니까? BLOBSQL 로 리터럴을 쓰지 않았 습니까? 16 진 편집기에서 파일을 본 적이 없습니까? 16 진수로 확실하게 표기 된 컴퓨터 관련 물건이 많이 있습니다 .

8 진은 요즘 드문 일이지만 여전히 유닉스 파일 시스템 권한에 사용됩니다.

참조 : 비트 단위 연산의 실제 적용

:도있는 거 어떤 "와이어에 가까운"를하고 지금까지 피할 수 프로그래밍이 경우, 그것은 하나의 단순한 이유로 컴퓨터가 바이너리에서 작동한다는 사실을 인식하는 것은 여전히 중요 추상화 누출 .

int대부분의 언어에서 추상화는 고정 폭 자연 누수. 정수가 오버플로되고 2 31 과 같은 "둥근"이진수에서 발생합니다 . 소수만의 사상가는 2038 년 버그 를 설명 할 수 없습니다 .

float/ double당신이 쓰는 경우 추상화 2. 자사의 기수 누수 0.1, 당신은 정말 0.1000000000000000055511151231257827021181583404541015625를 얻을. 정확한 0.1을 기대하면 버그가 발생합니다.


2

다른 기반에서 패턴이 단순한 특정 숫자를 인식하는 것은 종종 버그를 해결할 때 큰 단서입니다. 당신의 대답이 347에 의해 틀렸다면, 그것은 아무 의미가 없지만, 256이나 128에 의해 꺼져 있다면, 그것은 무언가를 의미 할 것입니다. 부호없는 16 비트 데이터 형식에 -1을 넣으면 65535가 65536보다 1이 작습니다. 2 ^ 16을 알게되면 즉시 문제를 발견하게됩니다.

8 진에 관해서는, 이 질문들을 살펴보고 실수로 8 진을 인식했을 때이 사람들을 더 나은 프로그래머로 만들 었는지 알아보십시오.


1

이러한 시스템과 작동 방식을 이해할 때 사용할 수있는 매우 효율적인 수학 및 데이터 압축 기술이 있습니다. 당신은 아마 처음 몇 가지 직업에서 그것들을 많이 사용하지 않을 것입니다. 그러나 선배가되었을 때 뒷주머니에 넣는 것은 과중한 공룡의 서버에서 작동하는 과로 된 레거시 시스템을 만드는 것이 좋습니다.
API가없는 컨트롤러 및 전자 제품을 다룰 때는 더욱 중요합니다. 특히 당신이 그 API를 쓰고 있다면.


1

컴퓨터 과학 연구의 일부인 프로그래밍 과정에 대한 소개는 그 내용을 잘 아는 것이 좋습니다. 어셈블리 언어로 프로그래밍 할 때, 하드웨어를 디자인 할 때, 공식 언어에 대한 코스를 수강 할 때 등의 주제를 다시 방문하십시오. 우리 대학의 모든 전기 기술자는 프로그래밍에 대한 코스를 요구하며 해당 정보를 계속 사용할 것입니다. 그 외에는별로 중요하지 않습니다.


1

8 진수는 문자셋을 다룰 때 유용합니다. 후자는 바이트 기반이며 1 개의 8 진수 = 8 비트 = 1 바이트입니다. 예를 들어 UTF-8에서 비 ASCII 문자는 둘 이상의 바이트를 가질 수 있습니다. 8 진수는 16 진수보다 더 편리합니다.

비트는 유용하기 때문에 ... 야! 컴퓨터가 끊임없이 0과 1을 다루고 있다는 것을 알고 있습니까? 진심으로 ... 컴퓨터 과학자가 1 + 1 = 10이라는 것을 아는 유일한 사람이라는 농담 만하는 것이 아니라 비트 관련 연산자 나 varbit에 유용합니다. 후자는 일련의 플래그를 처리 할 때 데이터베이스의 스토리지 요구 사항을 줄일 수 있습니다.

16 진수에 관해서는 RPG 캐릭터의 통계와 장비를 향상시키기 위해 16 진수 편집기를 열지 않은 것으로 생각합니다. 문자 편집기를 다운로드하는 대신 그렇게한다면 16 진수를 이해하는 것이 왜 편리한 지 잘 알 것입니다. ;-)


"옥탈"이 아니라 "옥텟"을 의미한다고 생각합니다. 8 진수는 3 비트입니다. 비 ASCII 문자에 8 진 상수를 사용하는 것은 PDP-11에서 개발 된 C의 초기부터 보류 된 것으로 대부분의 문서에서 8 진 표현을 사용했습니다 (이 PDP-11 참조 카드 참조 ).
TMN

그럴 수도 있습니다. 영어는 모국어가 아닙니다. :-)
Denis de Bernardy 2016 년

1

저는 3 년 전에 대학을 졸업했으며 16 진수를 읽고 쓰는 것이 매우 중요하다고 생각합니다. 작업을 위해 많은 큰 XML 파일을 엉망으로 만듭니다 (최대 100MB 이상). 때로는 텍스트 편집기에서 표시 할 수없는 잘못된 XML 문자를 불평하는 XML 파일을 얻을 수 있으므로 16 진수 편집기를 사용하고 유효하지 않은 문자를 정확하게 나타내는 코드를 작성해야했습니다. 이 작업은 16 진수를 모르면 매우 어려울 것입니다.


1

몇 년 전에 8 비트 시스템에서 작업하면서 16 진수의 가치를 배웠습니다.

무언가가 B000 또는 E7FF에 있다는 것을 이해하는 명확성은 놀랍습니다.

어제 나는 한 줄의 텍스트 끝에 어떤 문자가 있는지 정확히 알아야했습니다. 0x0A와 0x0A 0x0D의 차이를 아는 것이 실제로 중요 할 수 있습니다.


1

평균 프로그래머가 실제로 8 진수를 사용하는 위치에 대한 좋은 예가 있습니까?

요즘 8 진법은 매우 드물지만 16 진법을 자주 사용하며 종종 이진법 문제를 생각합니다.

나는 주로 Objective C와 함께 C 및 C ++로 프로그래밍하고 Linux 및 Mac OS X에서 래스터 및 벡터 그래픽으로 많은 작업을 수행합니다. 이러한 분야에서는 효율적으로 실행되고 스토리지를 잘 활용하는 코드를 작성하는 것이 무엇보다 중요합니다. 또한 기계가 작업중인 것을 내부적으로 나타내는 방식을 이해해야합니다. 가장 편리한 방법은 16 진수입니다. 예를 들어 표준 24 비트 컬러 픽셀은 3 바이트로 표시되며 0x000000이 검은 색, 0x00FF00이 빨간색, 0x008000이 분홍색임을 한눈에 아는 것이 정말 유용합니다!

또한 파일 형식에 대한 국제 표준을 많이 사용합니다. 최근에 작업 한 것은 방송, DVD 등의 비디오 저장에 사용되는 MXF입니다. 이진 형식이며 16 진 또는 이진을 사용하는 것이 가장 쉽습니다. 시스템에서 일부 MXF 기반 비디오가 제대로 재생되지 않는 이유를 디버깅 할 때 일부 32 비트 필드를 한눈에보고 화면을 비울 비트를 실수로 설정하는 것이 매우 편리합니다. 16 진법이지만 10 진법에서는 거의 불가능합니다.

텍스트 문자열을 마사지하기 위해 Perl을 작성하면서 커리어를 보내려면 16 진수, 8 진수 또는 2 진수에 대해 잘 알고있을 필요가 없습니다. 그러나 내가하는 일을 처리하기 시작하는 순간, 16 진수와 바이너리는 필수적입니다.


0

프로그래머가 되려면 16 진수를 알아야합니다. 당신이 그것을 이해하지 못한다는 것을 알아야하는 드문 날에 직장에서 인정해야하는 것은 너무 어색합니다.

그렇다고 머리에 16 진수를 추가 할 수 있어야한다는 의미는 아닙니다. 어쨌든 정기적으로 추가하기위한 규칙을 망치기 시작합니다. :)


0

이진, 16 진 및 8 진이 공통적으로 갖는 것은 그것들이 10이 아니라는 것이 아니라 모두 2의 거듭 제곱이라는 것입니다. 컴퓨터는 기본적으로 이진이므로 데이터를 표시하고 처리하는 가장 적절하거나 효율적인 방법 인 각 응용 프로그램을 제공합니다.

이것은 모든 프로그래밍 수준이 낮을 때 매우 중요했습니다. 오늘날 수준 높은 프로그래밍에서 Power-of-2 Number 시스템은 그다지 중요하지 않습니다. 모든 프로그래밍 과정에서 그들에게 철저한 소개를하는 것은 옛날의 유물 일 수 있습니다.

그러나 이러한 숫자 시스템은 고급 언어로 작업 할 때도 여전히 사용됩니다. 예를 들어, 색상은 여전히 ​​기본 색상 당 8 비트 인 24 비트로 저장됩니다. 16 진수는 사람이 읽을 수있는 방식으로 바이트를 표현하는 가장 좋은 방법이기 때문에 프로그래밍에 대해 전혀 소개하지 않은 사람들이 사용할 수있는 CSS의 일부이기도합니다.

바이너리를 이해하지 않으면 컴퓨터를 이해할 수 없습니다. 바이너리에 대한 소개는 프로그래밍에 대한 모든 철저한 소개의 필수 부분입니다. 일상 업무에서 숫자 시스템간에 많은 변환 작업을 수행 할 필요는 없지만, 그러한 운동을하는 것이 이러한 숫자 시스템에 실제로 익숙해지는 유일한 방법입니다 *. base10이 아닌 시스템을 두 개 이상 아는 것이 데이터를 여러 가지 방법으로 표현할 수 있다는 것을 올바르게 이해하는 유일한 방법입니다.

  • 존 폰 노이만 (John von Neumann)은 "[..] 우리는 사물을 이해하지 못하므로 익숙해집니다."

0

한베이스에서 다른베이스로의 변환은 프로그래밍에별로 중요하지 않다고 생각합니다. 높은 수준의 프로그래밍에서는 변환이 필요하지 않습니다 (그리고 lib 함수와 계산기를 사용할 수도 있습니다). 낮은 수준의 프로그래밍에 들어가면 더 이상 입문 과정이 아닙니다.

기초 과정에서 다루어야 할 두 가지 관련 문제가 중요하다고 생각합니다.

  1. 인코딩 정보. 수학 변환이 아니라 정보 (모든 유형의 정보)를 저장하기 위해 숫자 (모든 유형의 숫자)를 사용하는 것에 관한 것입니다. 당신이 원한다면 모스 부호로 이것을 설명하거나 숫자로 페인트 할 수도 있습니다. 그러나 컴퓨터는 이진을 사용하고 이진은 일반적으로 16 진으로 표시되므로 일반적으로 16 진 예로 설명됩니다. (그리고 그들이 그것에있는 동안, 그들은이 주제에서 언급 된 줄 끝에 대해 ​​조금 설명 할 수 있습니다. 나는 이것이 취할 수있는 다양한 모양과 형태를 인식하는 것이 좋습니다. 그중 몇 가지는 0x0D, 0x0A입니다. , CRLF, '\ n'및 '\ r')

  2. 오버 플로우 문제. 다시 한번, 16 진법으로 이것을 설명 할 필요가 없습니다. y2k 예제를 사용할 수 있습니다 (16 진수와 관련이 없음). 여기서 가장 가능성이 높은 다양한 지표 (255, 32767, 65535, 2M14)를 인식하는 것이 좋습니다. 내부 저장소에 대한 변환이 중요하지는 않습니다.

비트 플래그에 대해 알아야한다는 데 동의하지 않습니다 (프로그래밍의 도입 과정에서 명명 된 상수는 훨씬 더 지시적이고 유용합니다).


0

저수준 임베디드 프로그래밍에 들어가면 16 진수를 사용하게됩니다. 하드웨어 레지스터의 비트 패턴 지정 및 메모리 덤프의 바이트 값과 같은 작업에 사용됩니다. 또한 사용하는 프로그래밍 언어에 관계없이 모든 비트 단위 연산자를 사용하는 방법을 배웁니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.