2011-01-19 19 views

risposta

20

Il numero stesso è sempre interpretata come un numero non negativo. Le costanti esadecimali non hanno un segno o alcun modo intrinseco per esprimere un numero negativo. Il tipo di costante è il primo di questi che può rappresentare il loro valore:

int 
unsigned int 
long int 
unsigned long int 
long long int 
unsigned long long int 
+0

Mi manca l'esperienza per dichiararlo corretto, ma ha più senso dell'altra risposta. – delnan

+0

Nota che, di conseguenza, 0x8000 può essere firmato o non firmato a seconda che sizeof (int) sia 2 o 4. Yuck! Basta aggiungere 'u' se hai davvero bisogno di' unsigned'. – anatolyg

+1

@anatolyg: Non sono sicuro di cosa intendi per "schifo". Sarà sempre positivo e convertirà sempre al valore corretto se assegnato o promosso ad un altro tipo in cui il valore è ancora nel range che mi sembra un comportamento abbastanza ragionevole e desiderabile. –

12

E li tratta come int letterali (fondamentalmente, come int firmato!). Per scrivere un letterale senza segno sufficiente aggiungere u alla fine:

0x23FEu 
+2

Non credo che si possa lasciare questa affermazione come tale. E.g a condizione che la larghezza di 'int' sia a 32 bit il valore' 0x8000' è 'unsigned' (ovvero' INT_MAX + 1') e non 'signed' (e' INT_MIN'). –

+0

@JensGustedt: Presumibilmente vuoi dire che se la larghezza di 'int' è ** 16 ** bit allora' 0x8000' sarà 'unsigned'? –

+1

@Charles, probabilmente. Il conteggio dei bit non è mai stato il mio punto di forza :) –

Problemi correlati