Dlaczego liczby szesnastkowe poprzedzone są znakiem 0x?
Dlaczego liczby szesnastkowe są poprzedzone prefiksem 0x
?
Rozumiem użycie przedrostka, ale nie rozumiem znaczenia, dlaczego 0x
został wybrany.
4 answers
Krótka historia: 0
mówi parserowi, że ma do czynienia ze stałą (a nie identyfikatorem / słowem zastrzeżonym). Coś jest jeszcze potrzebne, aby określić bazę liczb: {[1] } jest wyborem arbitralnym.
Długa historia: W latach 60-tych powszechne systemy liczbowe były dziesiętne i ósemkowe - mainframe miały 12, 24 lub 36 bitów na bajt, co jest ładnie podzielne przez 3 = log2(8).
Język BCPL używał składni 8 1234
dla liczb ósemkowych. Kiedy Ken Thompson stworzył B z BCPL, użył prefiksu 0
. To jest świetne, ponieważ
- stała całkowita teraz zawsze składa się z pojedynczego tokena,
- parser może od razu stwierdzić, że ma stałą, Parser może od razu powiedzieć, że baza ({[0] } jest taka sama w obu bazach),
- jest matematycznie rozsądne (
00005 == 05
) i - nie są potrzebne żadne cenne znaki specjalne (jak w
#123
).
Gdy C powstało z B, pojawiło się zapotrzebowanie na liczby szesnastkowe (PDP-11 miał słowa 16-bitowe) i wszystkie powyższe punkty były nadal aktualne. Ponieważ oktale były nadal potrzebne dla innych maszyn, 0x
został wybrany arbitralnie (00
został prawdopodobnie wykluczony jako niezręczny).
C # jest potomkiem C, więc dziedziczy składnię.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-03 00:42:39
uwaga: nie znam poprawnej odpowiedzi, ale poniżej to tylko moje osobiste spekulacje!
Jak wspomniano 0 przed liczbą oznacza, że jest ósemkowa:
04524 // octal, leading 0
Wyobraź sobie potrzebę wymyślenia systemu oznaczającego liczby szesnastkowe i zauważ, że pracujemy w środowisku w stylu C. A co z zakończeniem NA h jak montaż? Niestety nie możesz-pozwoli to na tworzenie tokenów, które są ważnymi identyfikatorami (np. można nazwać zmienną to samo), które to by powodowało nieprzyjemne niejasności.
8000h // hex
FF00h // oops - valid identifier! Hex or a variable or type named FF00h?
Nie możesz prowadzić z postacią z tego samego powodu:
xFF00 // also valid identifier
Użycie hasha zostało prawdopodobnie wyrzucone, ponieważ koliduje z preprocesorem:
#define ...
#FF00 // invalid preprocessor token?
W końcu, z jakiegokolwiek powodu, zdecydowali się umieścić x po wiodącym 0, aby oznaczać szesnastkowy. Jest ona jednoznaczna, ponieważ nadal zaczyna się od znaku liczby, więc nie może być prawidłowym identyfikatorem i prawdopodobnie opiera się na konwencji ósemkowej wiodącego 0.
0xFF00 // definitely not an identifier!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-22 12:59:53
SIMPLE
Jest to prefiks, który wskazuje, że liczba jest w systemie szesnastkowym, a nie w innej bazie. Język programowania C używa go do określenia kompilatora.
Przykład:
0x6400
przekłada się na 6*16^3 + 4*16^2 + 0*16^1 +0*16^0 = 25600.
Gdy kompilator odczytuje 0x6400
, rozumie, że liczba jest szesnastkowa za pomocą0x term. Zwykle możemy zrozumieć przez (6400)16 lub (6400)8 albo cokolwiek ..
Dla binarnego będzie be
0b00000001
Nadzieja w jakiś sposób pomogła.Dzień Dobry ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-23 08:21:52
Poprzedzające 0 jest używane do wskazania liczby w bazie 2, 8 lub 16.
Moim zdaniem, 0x zostało wybrane, aby wskazać hex, ponieważ 'x' brzmi jak hex.
Tylko moje zdanie, ale myślę, że ma sens.
Miłego Dnia!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-27 00:53:09