2009-09-29 2 views
6

Mi aspettavo che questo stampasse un numero molto grande e lo stesso numero -1 ma stampa solo -1 e -2, perché questo?c perché stampa un numero negativo?

fprintf(stderr, "%d\n", 0xffffffff); 
fprintf(stderr, "%d\n", 0xfffffffe); 

risposta

30

Il formato %d è un numero intero con segno (decimale). I numeri interi vengono memorizzati utilizzando two's complement, il che significa che il bit di ordine superiore (8000 0000) indica, per modo di dire, il segno del valore.

Conto alla rovescia da 3, i valori sono:

0000 0003 = 3 
0000 0002 = 2 
0000 0001 = 1 
0000 0000 = 0 
FFFF FFFF = -1 
FFFF FFFE = -2 

ecc

Se si desidera FFFF FFFF per visualizzare come un gran numero positivo, utilizzare il formato %u (non firmato).

+0

oh, qual è il% per lungo? o non firmato? – user105033

+0

% u - appena aggiunto alla risposta :) –

+3

int è% d, unsigned è% u, long int is% ld, long unsigned is% lu –

4

I valori di cui parli sono la rappresentazione in complemento a due di -1 e -2

Look up two's complement

3

Il primo bit su un intero con segno è il segno, in modo che il numero più alto che potrebbe essere memorizzata è 0xEFFFFFFF.