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
대신 접두사를 사용했습니다. 이것은 대단하기 때문에
- 정수 상수는 항상 단일 토큰으로 구성됩니다.
- 파서는 여전히 상수가 있다고 즉시 알 수 있습니다.
- 파서는 즉시 기지를 말할 수 있습니다 (
0
두 기지에서 동일합니다). - 수학적으로 제정신 (
00005 == 05
)이며 - 귀중한 특수 문자는 필요하지 않습니다 (에서처럼
#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가 선택되었습니다.
단지 내 의견이지만, 나는 그것이 의미가 있다고 생각합니다.
좋은 날!
참고 URL : https://stackoverflow.com/questions/2670639/why-are-hexadecimal-numbers-prefixed-with-0x
'Programing' 카테고리의 다른 글
Swift의 URL에서 이미지로드 / 다운로드 (0) | 2020.02.26 |
---|---|
C # 또는 .NET에서 최악의 문제는 무엇입니까? (0) | 2020.02.26 |
"java -server"와 "java -client"의 실제 차이점은 무엇입니까? (0) | 2020.02.26 |
Visual Studio에서 솔루션 및 디렉토리의 이름을 바꾸는 올바른 방법 (0) | 2020.02.26 |
Flexbox 어린이를 부모의 100 % 높이로 만드는 방법은 무엇입니까? (0) | 2020.02.26 |