Cosa significano i numeri che utilizzano la notazione 0x?


107

Cosa significa un 0xprefisso su un numero?

const int shared_segment_size = 0x6400;

Viene da un programma C. Non riesco a ricordare cosa significhi e in particolare cosa xsignifichi la lettera .


2
Cerca "notazione esadecimale"
avvocato

2
@asawyer Thanks. Prima di selezionare "0x" come esadecimale, non avevo idea da dove cercare.
Terry Li

3
La ricerca di 0x prefix C++ti porta qui ora :)
Carl Smith

Risposte:


111

I valori letterali che iniziano con 0xsono numeri interi esadecimali. (base 16)

Il numero 0x6400è 25600.

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

Per un esempio che include lettere (utilizzato anche in notazione esadecimale dove A = 10, B = 11 ... F = 15)

Il numero 0x6BF0è 27632.

6 * 16^3 + 11 * 16^2 + 15 * 16^1 = 27632
24576    + 2816      + 240       = 27632

2
Quello che mi chiedevo, come dovrebbero essere indicati i numeri negativi in ​​esadecimale? Come -0xff o 0x-ff? Immagino il primo, ma non lo so.
Luc

7
@ Luc Il primo è corretto. Anche se più spesso vedo solo 0xffffffffe così. ( 0xffffffff = -1per int a 32 bit assumendo il complemento di 2)
Mysticial

I numeri @Luc Negatives sono rappresentati in binario usando il complemento di 2 - un modo intelligente che non richiede il segno "-". Quindi, fondamentalmente si converte da binario a esadecimale, negativo o positivo.
Shuvo Sarker

@ShuvoSarker Grazie per l'aggiunta! Questa è solo la rappresentazione della memoria, immagino simile a se fossimo d'accordo sul fatto che abbiamo un insieme di numeri da 0 a 999 e che 1000-1999 rappresenterebbe i numeri negativi. La mia domanda riguardava la notazione leggibile dall'uomo, anche se sapere come lo fanno i computer potrebbe aiutare qualcun altro, quindi grazie :)
Luc

16

In C e nei linguaggi basati sulla sintassi C, il prefisso 0xsignifica esadecimale (base 16).

Quindi, 0x400 = 4 × (16 2 ) + 0 × (16 1 ) + 0 × (16 0 ) = 4 × ((2 4 ) 2 ) = 2 2 × 2 8 = 2 10 = 1024, o un K binario .

Quindi 0x6400 = 0x4000 + 0x2400 = 0x19 × 0x400 = 25K


10

È un numero esadecimale.

0x6400 si traduce in 4 * 16 ^ 2 + 6 * 16 ^ 3 = 25600


8

I numeri che iniziano con 0xsono esadecimali (base 16). 0x6400rappresenta25600 .

Convertire,

  • moltiplicare l'ultima cifra per 1
  • aggiungi la penultima cifra per 16 (16 ^ 1)
  • aggiungi la terzultima cifra per 256 (16 ^ 2)
  • aggiungi la quarta ultima cifra per 4096 (16 ^ 3)
  • ...e così via

I fattori 1, 16, 256, ecc. Sono le potenze crescenti di 16.

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

o

0x6400 = (0*1) + (0*16) + (4*256) + (6*4096) = 25600 

7

SEMPLICE

È un prefisso per indicare che il numero è in esadecimale piuttosto che in qualche altra base. Il linguaggio di programmazione C lo usa per dire al compilatore.

Esempio :

0x6400si traduce in 6*16^3 + 4*16^2 + 0*16^1 +0*16^0 = 25600.Quando il compilatore legge 0x6400, Capisce che il numero è esadecimale con l'aiuto del termine 0x. Di solito possiamo capire da (6400)16 or (6400)8o qualsiasi base ..

La speranza ha aiutato in qualche modo.

Buona giornata,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.