programing

16진수 숫자 앞에 0x가 붙는 이유는?

prostudy 2022. 4. 19. 19:07
반응형

16진수 숫자 앞에 0x가 붙는 이유는?

16진수 숫자는 왜 다음과 같이 접두사 앞에 붙는가?0x? 접두사의 용도는 이해하지만, 그 이유는 이해되지 않는다.0x선택되었다.

단편:0파서에게 상수(식별자/표시 단어가 아님)를 처리하고 있음을 알린다.숫자 베이스를 지정하기 위해서는 여전히 무언가가 필요하다.x자의적인 선택이야

긴 이야기:60년대에 널리 보급된 프로그래밍 번호 시스템은 십진수 및 팔진수 — 메인프레임은 바이트당 12, 24 또는 36비트를 가졌으며, 이는 3 = log2(8)로 잘 구분된다.

BCPL 언어가 구문을 사용함8 1234팔분의 일수로Ken Thompson이 BCPL로부터 B를 만들었을 때, 그는 B를 사용했다.0접두사를 붙이다왜냐하면 대단하다.

  1. 현재 정수 상수는 항상 단일 토큰으로 구성된다.
  2. 파서는 여전히 상수가 있다는 걸 바로 알 수 있지만
  3. 파서는 즉시 베이스를 말할 수 있다.0두 베이스 모두 동일하다.
  4. 수학적으로 제정신이다.00005 == 05(), 그리고
  5. (에서와 같이) 소중한 특수 캐릭터는 필요하지 않다.#123).

C가 B로부터 생성되었을 때 16진수의 필요성이 생겨났고(PDP-11은 16비트 워드를 가지고 있었다) 위의 포인트는 모두 유효했다.팔십팔은 여전히 다른 기계에 필요했기 때문에,0x임의로 선택되었다(00아마도 어색한 것으로 배제되었을 것이다.

C#는 C의 후예여서 구문을 계승한다.

참고: 정답은 모르겠지만, 아래는 내 개인적인 추측일 뿐이야!

숫자 앞에 0이 언급되었듯이, 숫자는 8진수임을 의미한다.

04524 // octal, leading 0

16진수 숫자를 나타내는 시스템을 고안해야 한다고 상상해 보십시오. 그리고 우리가 C 스타일 환경에서 일하고 있다는 점에 주목하십시오.h like assembly로 끝내면 어때?불행히도 당신은 할 수 없다 - 그것은 당신이 유효한 식별자인 토큰을 만들 수 있게 해줄 것이다(예: 당신은 변수의 이름을 같은 것으로 지을 수 있다). 이것은 몇몇 끔찍한 애매모호함을 만들어 줄 것이다.

8000h // hex
FF00h // oops - valid identifier!  Hex or a variable or type named FF00h?

같은 이유로 등장인물을 리드할 수 없다.

xFF00 // also valid identifier

해시를 사용하는 것은 아마도 전처리기사와 충돌하기 때문에 폐기되었을 것이다.

#define ...
#FF00 // invalid preprocessor token?

결국 어떤 이유에서든 그들은 16진수를 나타내는 선행 0 뒤에 x를 붙이기로 했다.숫자 문자로 시작되므로 유효한 식별자가 될 수 없으며, 아마도 선행 0의 8진수 규약을 기반으로 하기 때문에 명확하지 않다.

0xFF00 // definitely not an identifier!

이것은 숫자가 다른 베이스가 아닌 16진수로 표시하기 위한 접두사 입니다.C 프로그래밍 언어는 컴파일러를 말하기 위해 그것을 사용한다.

예:

0x6400로 번역하다.6*16^3 + 4*16^2 + 0*16^1 +0*16^0 = 25600.컴파일러 읽기 시0x64000x 항의 도움을 받아 숫자가 16진수임을 이해한다.보통 우리는 (6400)16 또는 (6400)8 또는 그 어떤 것으로도 이해할 수 있다.

2진수의 경우 다음과 같다.

0b00000001

내가 어떤 식으로든 도와줬기를 바래.

좋은 하루!

나는 이면에 숨겨진 역사적 이유를 모른다.0x16진수 숫자를 나타내는 접두사로서 - 확실히 많은 형태를 취했을 수 있기 때문이다.이 특별한 접두사 스타일은 컴퓨터 과학의 초기부터이다.

우리는 십진수 숫자에 익숙하기 때문에 보통 염기/라디칼을 나타낼 필요가 없다.그러나 프로그래밍을 위해 우리는 종종 베이스와 이진수(베이스-2), 8진수(베이스-8), 10진수(베이스-10), 16진수(베이스-16)를 구별할 필요가 있다.

이 시점에서 그것은 숫자의 기초를 나타내는 데 사용되는 관습이다.나는 위의 모든 기초에 29라는 숫자를 접두사로 썼다.

  • 0b11101: 이진수
  • 0o35: o로 표시된 옥탈
  • 0d29: 십진수, 접두사가 없는 숫자를 십진수라고 가정하기 때문에 이것은 이례적이다.
  • 0x1D: 16진법

기본적으로 우리가 가장 일반적으로 베이스와 연관되는 알파벳(예: 이진 b)은 와 결합된다.0숫자의 기저를 쉽게 구별하다

0b1, 0o1, 0d1, 0x1 등 모든 기준에서 더 작은 숫자가 혼동될 수 있으므로 특히 유용하다.

리치 텍스트 편집기를 사용하는 경우에는 첨자를 사용하여 기준값28 110, 1, 1, 1을16 나타낼 수도 있다.

앞의 0은 베이스 2, 8 또는 16의 숫자를 나타내기 위해 사용된다.

내 생각에는 'x'가 16진수처럼 들리기 때문에 0x는 16진수를 나타내기 위해 선택되었다.

그냥 내 의견일 뿐이지만, 내 생각엔 말이 되는 것 같아.

굿데이!

참조URL: https://stackoverflow.com/questions/2670639/why-are-hexadecimal-numbers-prefixed-with-0x

반응형