왜 16 진수를 배우는가? [닫은] 내가 찾은 모든 종류의 프로그래밍에 발을 젖게

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

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

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



답변

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

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

글쎄, 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을 세지 않아도되기 때문에 더 읽기 쉽습니다).

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


답변

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


답변

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

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

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

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

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


답변

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

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

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

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

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

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


답변

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

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

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

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


답변

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

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

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

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

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


답변

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

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

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

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

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

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

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