Newsgroup: it.comp.lang.c
Titolo: operazioni con i numeri binari





Ciao.


Devo scrivere un programma in linguaggio c che 
legge due numeri binari rappresentati in un byte e ne esegue la somma, 
prodotto,divisione e moltiplicazione.


 


Come faccio in c a trattarli come numeri 
binari?


Se faccio la normale somma me li tratta come numeri 
in formato decimale.


 


E' possibile?


 


Grazie per l'aiuto e scusate se la mia domanda è 
banale.


 


Poli



 decimale.
Quando tu fai i calcoli non importa la base, il risultato è sempre lo 
stesso. In sostanza il calcolatore usa sempre i numeri binari. Probabilmente 
il tuo problema è che vuoi leggere in input una stringa di 8 caratteri '1' o 
'0' e ottenerne una rappresentazione binaria memorizzata in un byte. Se è 
così, devi utilizzare l'AND e l'OR bit a bit, cioè gli operatori & e | del 
C.
Se numeri i caratteri che leggi da 7 a 0, puoi fare:
unsigned char uchByte = 0;
int i;
for (i=7;i>=0;i--) {
    if (carattere[i]=='1')
        uchByte |= 1 << i;
}
ATTENZIONE: CODICE NON TESTATO!
-- 
Costantino Grana 

 }
Aiuto temo di non aver capito.
Cmq non esistono delle funzioni che mi convertono un numero in binario su 
Nbit e altre che invece mi fanno la somma e mi segnalano situazioni tipo 
OVERFLOW, UNDERFLOW etc?
Grazie ancora.
Poli

 tipo OVERFLOW, UNDERFLOW etc?
Dipende da cosa intendi per numero binario.  Tutti i numeri sono 
rappresentati come numeri binari nella CPU.
Se invece intendi una stringa, per es. "00110111", come la puoi 
entrare da terminale, vale il suggerimento di Constantino perché la 
devi prima convertire in numero.
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >

 convertire in numero.
Per numero binario con segno intendo una stringa di 8 bit letta da stdin.
e di questa devo fare la somma in complemento a 2 tenendo conto del segno e 
controllare se si verifica overflow.
Poli

Dunque riformulo il mio problema con maggior precisione:
1) leggo da tastiera due numeri a,b in complemento a 2 su bit
2) Su questi due numeri devo fare la somma e restituirla sempre in ca2.
In pratica dovrei riuscire a trasformare a e b in signed int.....
ma non so come!
uffa... :(
Poli

Cioè ci vorrebbe qualcosa come strtol che accetta stringhe che rappresentano 
due numeri in complemento a 2....
Poli 

 segno e controllare se si verifica overflow.
Ciao


> Stringa di otto bit?  Spiega cosa intendi!!
Scusami, intendo che ta stdin devo leggere 8 bit.
e questi 8 bit rappresentano un numero binario in ca2.


Da standard input si leggono caratteri :-(


 e controllare se si verifica overflow.
Il codice che ti ho postato fa esattamente la conversione che hai chiesto. 
La stringa la devi mettere nell'array che ho chiamato carattere.
Quello che devi fare è prendere ogni bit e moltiplicarlo per 2 alla 
posizione che ha nella stringa.
-- 
Costantino Grana 


dnque 8 bit in ca2 sono un char direi; quindi usi il metodo
precedentemente indicato per mettere gli 1 e 0 della stringa letta
dentro al char.
ora hai 2 char. i limiti sono -128 e + 127.
Per fare le operazioni puoi castarli a signed short int per
esempio;fai i calcoli e vedi se il risultato sta dentro al range -128
+ 127 o no; se sta dentro, allora sei a posto, se no significa che con
dei char avrei un risultato sbagliato

Ciao a tutti, aggiungo qui per non aprire un altro thread.
Anche io ho problemi con le operazioni sui binari, non li so usare.
Ho bisogno di realizzare una funzione di hash, che data una stringa in
ingresso mi restituisca un numero (indice di una hash table).
int HashFunction (char *str);
es
                         c               a
s                        a
                  0110 0011   0110 0001         0111 0011         0110
0001
xor              1  1   0  0     1  1  0  1           1  0  0
0           1 1   0  1
decimale   52621
e solo un esempio, probabilmente ho sbagliato qualcosa.
grazie per l'aiuto