Co oznaczają liczby w notacji 0x?

107

Co oznacza 0xprefiks w liczbie?

const int shared_segment_size = 0x6400;

Pochodzi z programu w C. Nie mogę sobie przypomnieć, co to oznacza, a zwłaszcza co xoznacza ten list .

Terry Li
źródło
2
Wyszukaj „notację szesnastkową”
asawyer
2
@asawyer Thanks. Zanim jednak wybrałem „0x” jako szesnastkowy, nie miałem pojęcia, skąd szukać.
Terry Li
3
Wyszukiwanie 0x prefix C++prowadzi cię tutaj teraz :)
Carl Smith

Odpowiedzi:

111

Literały rozpoczynające się od 0xto szesnastkowe liczby całkowite. (podstawa 16)

Liczba 0x6400to 25600.

6 * 16^3 + 4 * 16^2 = 25600

Na przykład zawierający litery (używane również w notacji szesnastkowej, gdzie A = 10, B = 11 ... F = 15)

Liczba 0x6BF0to 27632.

6 * 16^3 + 11 * 16^2 + 15 * 16^1 = 27632
24576    + 2816      + 240       = 27632
Mistyczne
źródło
2
Nad czym się zastanawiałem, jak należy oznaczać liczby ujemne w szesnastce? Jak -0xff czy 0x-ff? Chyba pierwszy, ale nie wiem.
Luc
7
@Luc Pierwsza jest poprawna. Chociaż częściej widzę właśnie 0xffffffffi takie. ( 0xffffffff = -1dla 32-bitowego int przy założeniu uzupełnienia 2)
Mysticial
@Luc Liczby ujemne są przedstawiane w systemie binarnym za pomocą dopełnienia do 2 - sprytny sposób, który nie wymaga znaku „-”. Jest to więc w zasadzie konwersja z binarnego na szesnastkowy, ujemny lub dodatni.
Shuvo Sarker
@ShuvoSarker Dzięki za dodanie! To tylko reprezentacja pamięci, myślę, że podobnie jak gdybyśmy zgodzili się, że mamy zbiór liczb od 0 do 999 i że 1000-1999 będzie reprezentować liczby ujemne. Moje pytanie dotyczyło notacji czytelnej dla człowieka, chociaż wiedza o tym, jak to robią komputery, może pomóc komuś innemu, więc dziękuję :)
Luc
16

W języku C i językach opartych na składni C przedrostek 0xoznacza szesnastkowy (podstawa 16).

Zatem 0x400 = 4 × (16 2 ) + 0 × (16 1 ) + 0 × (16 0 ) = 4 × ((2 4 ) 2 ) = 2 2 × 2 8 = 2 10 = 1024 lub jedno binarne K .

A więc 0x6400 = 0x4000 + 0x2400 = 0x19 × 0x400 = 25K

Pozdrawiam i hth. - Alf
źródło
10

To liczba szesnastkowa.

0x6400 przekłada się na 4 * 16 ^ 2 + 6 * 16 ^ 3 = 25600

knittl
źródło
8

Liczby zaczynające się od 0xsą szesnastkowe (podstawa 16). 0x6400reprezentuje 25600.

Przekonwertować na,

  • pomnóż ostatnią cyfrę razy 1
  • dodaj przedostatnią cyfrę razy 16 (16 ^ 1)
  • dodaj trzecią przedostatnią cyfrę razy 256 (16 ^ 2)
  • dodaj czwartą przedostatnią cyfrę razy 4096 (16 ^ 3)
  • ...i tak dalej

Czynniki 1, 16, 256 itd. To rosnące potęgi 16.

0x6400 = (0*1) + (0*16^1) + (4*16^2) + (6*16^3) = 25600 

lub

0x6400 = (0*1) + (0*16) + (4*256) + (6*4096) = 25600 
Sithu
źródło
7

PROSTY

Jest to przedrostek wskazujący, że liczba jest zapisana w systemie szesnastkowym, a nie w innej bazie. Język programowania C używa go do informowania kompilatora.

Przykład:

0x6400tłumaczy się na 6*16^3 + 4*16^2 + 0*16^1 +0*16^0 = 25600.Kiedy kompilator czyta 0x6400, rozumie, że liczba jest szesnastkowa za pomocą terminu 0x. Zwykle możemy zrozumieć przez (6400)16 or (6400)8lub jakąkolwiek podstawę.

Nadzieja pomogła w jakiś sposób.

Dobry dzień,

loyola
źródło