Qual è la differenza tra unsigned short
e unsigned int
? Ho trovato che unsigned short
è 0-65,535
e unsigned int
è 0-65,535
o 0-4,294,967,295
. Non capisco molto bene la differenza. Come posso conoscere la dimensione del tipo di dati nella mia architettura? E se ad esempio c = (unsigned short) d;
quando c
è un unsigned short
ed è un unsigned int
; che significa? i primi 16 bit da d
vengono assegnati a c
?unsigned short vs unsigned int - a volte sono la stessa gamma?
risposta
Stai davvero chiedendo quale sia la differenza tra short
e int
. La risposta è che short
potrebbe essere più stretto, ma potrebbe anche avere la stessa larghezza di, int
. Questo è praticamente tutto ciò che sappiamo, indipendentemente dalla piattaforma. Molte piattaforme hanno lo int
a 32 bit e lo short
a 16 bit, ma non tutte.
Grazie. Puoi controllare la mia seconda parte? :) – mpluse
No, non lo farò, per favore basta fare un'altra domanda invece di aggiungere più bit a uno che ha già risposto. Se cerchi le tue nuove richieste, probabilmente troverai già domande con le risposte qui. –
Ok. Grazie lo stesso. – mpluse
Questo è un link utile per spiegare la storia dei tipi di dati C:
http://en.wikipedia.org/wiki/C_data_types
Quindi la dimensione del vostro tipo di dati dipende dalla piattaforma, ma se l'int è 32 bit di lunghezza allora sarà in grado di rappresentare uno dei 2^32 numeri diversi (0 - 4.294.967.295 se non firmato). Allo stesso modo se il tuo corto ha una lunghezza di 16 bit allora può rappresentare uno dei 2^16 numeri diversi (0 - 65.535 se non firmato).
Questo link vi dà i dettagli di implementazione per Visual Studio 2005, dove interi sono 32-bit nel formato (4 byte) e pantaloncini sono 16-bit (2 byte):
http://msdn.microsoft.com/en-us/library/s3f49ktz(v=vs.80).aspx
tuo esatto l'implementazione dipenderà dal tuo compilatore.
Come per l'ultima parte della tua domanda, sì, se provi a lanciare un int maggiore del valore massimo del corto a un corto, ti ritroverai con un valore diverso (probabilmente i primi 16 bit ma dovresti provare per essere sicuro).
Prima di tutto, è necessario capire cosa è un int unsigned e short.
Tutto è suddiviso in bit.
Breve è 16 bit, ciascun bit è un 1 o uno 0. Per semplicità dimostrerò con 4 bit
1000 - Unsigned = 8
1000 - Signed = -8
1111 - Unsigned = 15 which is equal to 2^(# of bits) -1
1111 - Signed = -1
notare che con un numero senza segno, l'intervallo di numeri è maggiore, possiamo rendere 1111 = 15.
Ma con un numero con segno, la massima possibilità è 0111 = 7.
Ora un breve ha 16 bit, dandogli
signed range of −32,768 to 32,767 [−(2^15) to 2^15 − 1]
Unsigned range: 0 to 65,53 = 2^16 -1
Un Int ha 32 bit, per fornire un campo di
Signed:−2,147,483,648 to 2,147,483,647 = −(2^31) to 2^31 − 1
Unsigned: 0 to 4,294,967,295 = 2^16 -1
Grazie. Lo so, solo un'ambiguità perché hanno lo stesso intervallo di valori. – mpluse
@Prima di Ah. Quando si fa un corto, non garantisce 16 bit, mentre un Int 16 bit lo fa. Quindi è per quei casi in cui hai assolutamente bisogno di un intero a 16 bit. Un po 'strano – BrettD
Estremamente sbagliato ... un 'char' è almeno di 8 bit, un' short' o un 'int' 16, un' lungo' di 32 bit. E sul CRAY sono tutti 32 bit. – vonbrand
Non possiamo dire un nome di tipo variabile (short, int, long, double etc.) deve puntare specifica lunghezza in bit in tutti architetture a microprocessore o linguaggi di programmazione.Dipende principalmente dall'architettura dei microprocessori e naturalmente dalle definizioni dei linguaggi di programmazione. Generalmente, il corto firmato/non firmato dovrebbe avere (mi aspetto) un mezzo bit di int firmato/non firmato.
Perché sono menzionate tre lingue? – Lion
Suona come C, rimuovendo tag di lingua estranei. – djechlin
Non è generale per 3 lingue? – mpluse