Cosa significa (unsigned) in questo esempio di passaggio del parametro a srand (la funzione time, inclusa in time.h, restituisce l'ora di sistema in secondi da (00:00:00), January 1, 1970):
codice:srand( (unsigned)time( NULL ) );
Cosa significa (unsigned) in questo esempio di passaggio del parametro a srand (la funzione time, inclusa in time.h, restituisce l'ora di sistema in secondi da (00:00:00), January 1, 1970):
codice:srand( (unsigned)time( NULL ) );
forse sono stato troppo vago.....
allora i tipi interi possono essere dotati o privi di segno(signed o unsigned).
Se un tipo ha segno, il bit piu a sinistra rappresenta il segno(se 1 negativo,se 0 positivo);i rimanenti bit il valore;
Se un tipo non ha segno tutti i bit rappresentano il valore;
esempio:
un tipo con otto bit(ad esempio un char)e con segno puo rappresentare valori da -128 a 127,invece un tipo sempre con otto bit, ma senza segno puo rappresentare valori da 0 a 255
in generale:
i tipi signed con n bit possono rappresentare valori da
-2elevato alla n-1 a (2elevato alla n-1)-1
i tipi unsigned con n bit possono rappresentare valori da
0 a (2elevato alla n)-1
ciao
No. Nel caso di numeri con segno la notazione usata è la complemento a due.Originariamente inviato da Zalex
allora i tipi interi possono essere dotati o privi di segno(signed o unsigned).
Se un tipo ha segno, il bit piu a sinistra rappresenta il segno(se 1 negativo,se 0 positivo);i rimanenti bit il valore;
- "Boy, the food at this place is really terrible."
- "Yeah, I know, and such ... small portions."
in pratica raddoppi il range di una variabile.
No.Originariamente inviato da debbelandia
in pratica raddoppi il range di una variabile.
- "Boy, the food at this place is really terrible."
- "Yeah, I know, and such ... small portions."
Originariamente inviato da Dwenegar
No. Nel caso di numeri con segno la notazione usata è la complemento a due.
e' evidente che non sai(o non ti ricordi ) cos'e' la rappresentazione in complemento a due!!!!!!!!!!!!!
ti rinfresco un po le idee:
nella suddetta rappresentazione gli interi positivi da 0 a (2elevato alla n-1)-1 si rappresentano normalmente,invece un numero negativo k
(compreso tra -2elevato alla n-1 e -1) viene rappresentato come k+2elevato alla n;ne segue la rappresentazione in complemento a due di un numero negativo ha sempre 1 nel bit piu a sinista;
ti do anche la dimostrazione formale va'!
fatto:i numeri negativi rappresentabili sono in (-2elevato alla n-1,-1);
sia k numero piu' piccolo appartenente a tale intervallo(quindi -2elevato alla n-1);
sommando a k 2elevato alla n,otteniamo -2elevato alla n-1 + 2elevato alla n=2elevato alla n-1;
2elevato alla n-1 ha necessariamente un 1 nel bit piu' a sinistra,xche' un teorema dice che un numero binario con n bit rappresenta un valore maggiore di (2elevato alla n-1)-1 se e solo se il suo bit piu a sinistra e' 1!!!
A maggior ragione avranno il bit piu a sinistra uguale a 1 tutti i numeri appartenenti allo stesso intervallo di k e maggiori di k,quindi tutti i numeri negativi.
...ricapitolando i numeri positivi hanno zero nel bit piu a sinistra e i numeri negativi hanno 1 in pos piu a sinistra
ciao
Cosa succeda al dato durante una conversione ad unsigned, come nel caso che ho riportato sopra?
Ricordo benissimo cos'è la rappresentazione in complemento a due. Ma tu hai scritto:Originariamente inviato da Zalex
e' evidente che non sai(o non ti ricordi ) cos'e' la rappresentazione in complemento a due!!!!!!!!!!!!!
che è la descrizione della notazione in segno e modulo (ovviamente io ho inteso valore come modulo e non penso di aver sbagliato).]Originariamente inviato da Zalex
... il bit piu a sinistra rappresenta il segno(se 1 negativo,se 0 positivo);i rimanenti bit il valore...
- "Boy, the food at this place is really terrible."
- "Yeah, I know, and such ... small portions."
viene interpretato come ci si aspetta, cioe' come un numero senza segno!
con una dichiarazione come int x; x ha segno!quindi e' legale per esempio assegnare a x il valore -1;la sua rappresentazione in binario(in complemento a due) sara di 32 bit tuti a 1;
quindi se provi a stampare x ottieni -1;
se casti x a un int senza segno con (unsigned)x, sara' interpretato come un numero senza segno, quindi non varra' piu' -1, ma (2elevato alla 32)-1