.A dire il vero si parla di zeri significativi e non significativi, non di zeri più o meno significativi. Il tutto si spiega tenendo presente che il sistema numerico binario (così come gli altri) è "pesato", cioè le cifre binarie che costituiscono un numero concorrono diversamente al valore del numero a seconda della loro posizione al suo interno... cioè il numero 101 ha un valore diverso da 11 perché, pur essendoci in entrambi i numeri due 1, questi occupano posizioni diverse e quindi hanno anche un "peso" diverso. Parlare di bit "meno" significativi e bit "più" significativi significa quindi volersi riferire appunto ai bit che hanno peso minore (meno significativi) o maggiore (più significativi) all'interno della rappresentazione del numero. I bit più significativi sono quelli a sinistra della rappresentazione binaria, quelli meno significativi sono a destra.Originariamente inviato da Malloc
P.S. .. una volta risolto il problema...sapete anche dirmi se l'algoritmo è fatto bene?..Il programma consiste in una estrazione di bit meno o più significatvi..e sinceramente non mi è chiara la richiesta visto che quando si parli di meno e più significativi si parla di ZERI no di BIT...anche perchè il BIT 1 non può essere mai "meno significativo" visto che la sua assenza porta comunque ad un cambio del valore originale![]()
Per quanto riguarda poi l'algoritmo innanzitutto correggi come ti diceva oregon (era l'errore che faceva crashare il programma) e poi:
1) per gli interi senza segno si utilizza il codice di formato %u (v. num);
2) i valori di tipo int sono generalmente su 32 bit, ma tu lavori solo su 16... questo rende senza senso l'estrazione dei bit più significativi (visto che lavori sono sui 16 meno significativi);
3) lo shift a sinistra della maschera va fatto nel caso dell'estrazione dei bit più significativi, non per quelli meno significativi;
4) elimina system("PAUSE") e mettici una getchar() o una scanf();
5) per inizializzare a 0 l'intero array di bit puoi scrivere anche semplicemente "int bit[16] = { 0 }"; non cambia nulla, ma se l'array avesse avuto 64 componenti, scrivere 0 per 64 volte sarebbe stato poco agevole o-o"
6) la stampa dei bit all'interno di estrbit riscrivila così:
questo rende più generale e sintetica la condizione dell'if... se avessi lavorato su interi a 64 bit, scrivere tutti i multipi di 4 sarebbe stato troppo laborioso e anche poco elegante.codice:printf("%d", bit[0]); for (i = 1; i < 16; i++) { if ( ! ( i % 4 ) ) printf(" %d", bit[i]); else printf("%d", bit[i]); }
Comunque ti consiglio di ridefinire tutti gli interi come short (leggendo e stampando con il codice di formato %hd) e di scrivere lo shift di mask nel caso dell'estrazione dei bit più significativi... così dovrebbe andare, poi le altre cose sono di secondaria importanza.