[c] 16 진 숫자 앞에 0x가 붙는 이유는 무엇입니까?

16 진수가 접두사로 붙는 이유는 무엇 0x입니까? 접두사의 사용법을 이해하지만 왜 0x선택된 이유의 중요성을 이해하지 못합니다 .



답변

짧은 이야기 : (가) 0는 상수 (그리고 식별자 / 예약 된 단어)를 다루는 것 파서를 알려줍니다. 수 기준을 지정하려면 무언가가 여전히 필요합니다 x. 임의 선택입니다.

긴 이야기 : 60 년대에 널리 사용 된 프로그래밍 수 시스템은 10 진수 및 8 진수입니다 . 메인 프레임은 바이트 당 12, 24 또는 36 비트를 가졌으며 이는 3 = log2 (8)로 나눌 수 있습니다.

BCPL 언어 8 1234는 8 진수 의 구문 을 사용했습니다 . Ken Thompson은 BCPL에서 B를 만들 때 0대신 접두사를 사용했습니다. 이것은 대단하기 때문에

  1. 정수 상수는 항상 단일 토큰으로 구성됩니다.
  2. 파서는 여전히 상수가 있다고 즉시 알 수 있습니다.
  3. 파서는 즉시 기지를 말할 수 있습니다 ( 0두 기지에서 동일합니다).
  4. 수학적으로 제정신 ( 00005 == 05)이며
  5. 귀중한 특수 문자는 필요하지 않습니다 (에서처럼 #123).

C가 B에서 만들어 졌을 때 16 진수가 필요 해졌고 (PDP-11에는 16 비트 단어가 있음) 위의 모든 사항이 여전히 유효했습니다. 다른 기계에는 8 진수가 여전히 필요했기 때문에 0x임의로 선택되었습니다 ( 00아마도 어색한 것으로 간주).

C #은 C의 자손이므로 구문을 상속합니다.


답변

참고 : 나는 정답을 모르지만 아래는 내 개인적인 추측입니다!

앞에서 언급했듯이 숫자가 0이면 8 진수를 의미합니다.

04524 // octal, leading 0

16 진수를 나타내는 시스템이 필요하다고 가정하고 C 스타일 환경에서 작업하고 있음을 참고하십시오. h와 같은 어셈블리로 끝나는 것은 어떻습니까? 불행히도 할 수는 없습니다-유효한 식별자 인 토큰을 만들 수 있습니다 (예 : 변수 이름을 같은 것으로 지정할 수 있음).

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

같은 이유로 캐릭터를 이끌 수 없습니다.

xFF00 // also valid identifier

전처리 기와 충돌하기 때문에 해시를 사용했을 수 있습니다.

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

결국, 어떤 이유로 든 그들은 선행 0 뒤에 x를 두어 16 진을 표시하기로 결정했습니다. 여전히 숫자 문자로 시작하기 때문에 모호하지 않으므로 유효한 식별자가 될 수 없으며 아마도 선행 0의 8 진 규칙을 기반으로합니다.

0xFF00 // definitely not an identifier!


답변

숫자가 다른 기본이 아닌 16 진수임을 나타내는 접두어입니다. C 프로그래밍 언어는이를 사용하여 컴파일러에 알립니다.

예:

0x6400로 변환 6*16^3 + 4*16^2 + 0*16^1 +0*16^0 = 25600.
컴파일러는 읽을 때 0x6400, 그것은 수의 도움으로 16 진수 이해 0X 용어. 보통 우리는 (6400) 16 또는 (6400) 8 또는 무엇이든 이해할 수 있습니다 .

들어 이 될 것이다 :

0b00000001

어떤 식 으로든 도움이 되었기를 바랍니다.

좋은 날!


답변

앞의 0은 밑 2, 8 또는 16의 숫자를 나타내는 데 사용됩니다.

내 생각에, ‘x’는 16 진처럼 들리므로 16 진을 나타 내기 위해 0x가 선택되었습니다.

단지 내 의견이지만, 나는 그것이 의미가 있다고 생각합니다.

좋은 날!


답변