|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1075
|
c - concatenazione dei calcoli
evitatemi discorsi su questo codice, perché già qualcuno mi ha detto che si può realizzare in altri modi. Ma da quello che vedete sotto non posso sviare... è un esercizio del prof in cui biosogna convertire un numero decimale in binario. Sono riuscito a scriverlo da solo, il punto è che non riesco a capire in che modo vengono concatenati i dati durante il calcolo (dall'else in poi).
#include <stdio.h> int main(void) { int dec; int r1,r2,r3,r4,r5,r6,r7,r8; printf("Immetti un valore decimale minore di 128 da convertire in binario\n"); scanf("%d",&dec); if(dec>=128) { printf("ATTENZIONE:Il valore immesso e' troppo alto, immetterne uno minore di 128\n"); return 0; } else { r8=dec%2; dec=dec/2; r7=dec%2; dec=dec/2; r6=dec%2; dec=dec/2; r5=dec%2; dec=dec/2; r4=dec%2; <---- come si riescono a concatenare??? dec=dec/2; r3=dec%2; dec=dec/2; r2=dec%2; dec=dec/2; r1=dec%2; dec=dec/2; } printf("Il valore immesso in codice binario corrisponde a: %d%d%d%d%d%d%d%d\n",r1,r2,r3,r4,r5,r6,r7,r8); getchar(); return 0; } |
![]() |
![]() |
![]() |
#2 | ||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
![]() Quote:
È abbastanza semplice, immaginiamo di avere il valore binario 00100101 Il primo modulo %2 ti fornisce il bit più a destra, quindi: 00100101 La successiva divisione, divide per due, che equivale a shiftare a destra i bit, quindi ottieni: 00010010 A quel punto continua allo stesso modo come prima.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1075
|
Quote:
grazie per la chiarezza. ho capito qualcosina in più ma non completamente ![]() ps: potresti farmi un esempio con numeri decimali?? es 35 è = a 00100011 ovvero: 35/2=17 r=1 17/2=8 r=1 8/2=4 r=0 4/2=2 r=0 2/2=1 r=0 1/2=0 r=1 prenderli dal basso verso l'alto ed otteniamo il numero 35 in binario... ma in quel codice non riesco ad individuare questa sequenzialità. Ultima modifica di norbertom : 05-11-2007 alle 13:40. |
|
![]() |
![]() |
![]() |
#4 | ||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quote:
Sì. Valore 37 (binario 00100101) 37 % 2 = 1 37 / 2 = 18 (binario 00010010) 18 % 2 = 0 18 / 2 = 9 (binario 00001001) 9 % 2 = 1 9 / 2 = 4 (binario 00000100) ecc...
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1075
|
ho capito... quindi basta ripetere una riga dopo l'altra questa formula e lui automaticamente ti riporta il numero sotto,.. ok.
ps: scusami se ti scasso le OO ma per scrivere 2 righe in C sto tirando giù i santi ![]() Ultima modifica di norbertom : 05-11-2007 alle 13:56. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Il codice che hai scritto comunque è corretto, salvo il fatto che non andrebbe bene per valori negativi (il modulo ti ritornerebbe con segno negativo, quindi -1 o 0) e se hai 8 bit il valore massimo sarebbe 255, non 127.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:09.