| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  05-11-2007, 12:40 | #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; } | 
|   |   | 
|  05-11-2007, 13:08 | #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%) | ||
|   |   | 
|  05-11-2007, 14:33 | #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 14:40. | |
|   |   | 
|  05-11-2007, 14:42 | #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%) | ||
|   |   | 
|  05-11-2007, 14:51 | #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  e non riesco a fare qualcosa di decente! Ultima modifica di norbertom : 05-11-2007 alle 14:56. | 
|   |   | 
|  05-11-2007, 15:29 | #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: 17:57.









 
		 
		 
		 
		







 
  
 



 
                        
                        










