2013-03-17 9 views
8

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?

+0

Perché sono menzionate tre lingue? – Lion

+0

Suona come C, rimuovendo tag di lingua estranei. – djechlin

+0

Non è generale per 3 lingue? – mpluse

risposta

6

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.

+0

Grazie. Puoi controllare la mia seconda parte? :) – mpluse

+1

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. –

+1

Ok. Grazie lo stesso. – mpluse

1

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).

+0

Grazie. Puoi controllare la mia seconda parte? :) – mpluse

+0

Vedere la mia modifica sopra – gavinj500

+0

Ho già visto il collegamento. TY – mpluse

-1

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 
+0

Grazie. Lo so, solo un'ambiguità perché hanno lo stesso intervallo di valori. – mpluse

+0

@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

+1

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

0

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.

+0

Scarica! Grazie. – mpluse

+1

No ... in C 'short' e' int' possono benissimo essere entrambi a 16 bit. Era il caso di DOS, BTW. – vonbrand