PDA

View Full Version : [C++] dichiarare una variabile binaria


Albitexm
09-03-2010, 23:37
In C++ posso assegnare a una variabile un valore binario?
Io leggo tipi di dati: short,int,long,char,double,bool. Ma non trovo il tipo di dato binario. Se io ad esempio volessi che la variabile A sia = 00100001 cosa dovrei usare? Esiste il tipo di dato binario in C++ ?
Ora io voglio scrivere un elenco di byte, e poi eseguire l'AND tra loro. Io ho trovato il tipo _int64 ma si riferisce a un'intero decimale di 64bit. Ma allora dovrei prima di scrivere il programma convertire il binario in decimale, poi fare le operazioni booleane che m'interessano e poi convertile di nuovo in binario e il risultato quando lo uso convertirlo ancora in quel che mi serve? Io vorrei allocare dei dati di tipo binario e eseguire operazioni booleane tra loro. Il risultato binario: o manipolarlo con altre operazioni o convertirlo per il seguito del programma.

Tommo
10-03-2010, 00:12
Beh in C/C++ tutti i tipi sono implicitamente tipi binari... quindi puoi trattarli tutti come sequenze di bits lunghe sizeof( tipo ) * 8.
Un elenco di bytes credo sia meglio realizzarlo con un array di char.

Poi, dato ogni singolo byte/char, puoi settare i bits individuali con gli operatori binari.

Black imp
10-03-2010, 01:25
usa un unsigned char e lavora in esadecimale.


unsigned char valueArray[2] = {0x21, 0x01};

unsigned char finalValue = valueArray[0];

for (unsigned int i = 1; i < 2; i++)
{
finalValue &= valueArray[i];
}

tomminno
10-03-2010, 08:41
In C++ posso assegnare a una variabile un valore binario?
Io leggo tipi di dati: short,int,long,char,double,bool. Ma non trovo il tipo di dato binario. Se io ad esempio volessi che la variabile A sia = 00100001 cosa dovrei usare? Esiste il tipo di dato binario in C++ ?


Esiste il contenitore bitset.

fero86
10-03-2010, 11:50
Ma allora dovrei prima di scrivere il programma convertire il binario in decimale, poi fare le operazioni booleane che m'interessano e poi convertile di nuovo in binario e il risultato quando lo uso convertirlo ancora in quel che mi serve? esattamente: devi fare questo, e nel farlo ti accorgerai (senza offesa :D) di quanto sei fesso, perché per la conversione tra basi non dovrai fare assolutamente nulla :asd:

per le operazioni booleane bit a bit usa gli operatori bitwise: &, |, ^, ~

fero86
10-03-2010, 11:51
Se io ad esempio volessi che la variabile A sia = 00100001 cosa dovrei usare? A = 33;

oppure

A = 0x21;

Albitexm
10-03-2010, 22:03
esattamente: devi fare questo, e nel farlo ti accorgerai (senza offesa :D) di quanto sei fesso, perché per la conversione tra basi non dovrai fare assolutamente nulla :asd:

per le operazioni booleane bit a bit usa gli operatori bitwise: &, |, ^, ~
ma ancora un dubbio: differenza tra opraatori bitwise e operatori logici generici. Ovvero l'operatore logico & io l'ho usato per scrivere espressioni tipo:
if condizione1 vera & condizione2 vera then .. mentre noi parliamo di eseguire la AND "matematica" tra due variabili. Il simbolo è sempre & ?

Albitexm
10-03-2010, 22:25
Esiste il contenitore bitset.
Grazie per l'indicazione. Ho visto sull'Help del compilatore le decine di voci relative a bitarray, bitset array ecc.. Sono giunto alla conclusione che è più semplice lavorare con degli array di tipo char (come sostiene Tommo) anche se ovviamente la resa sarà diversa. Si avrà una maggiore semplicità di stesura del codice a scapito delle prestazioni.

tomminno
10-03-2010, 23:02
ma ancora un dubbio: differenza tra opraatori bitwise e operatori logici generici. Ovvero l'operatore logico & io l'ho usato per scrivere espressioni tipo:
if condizione1 vera & condizione2 vera then .. mentre noi parliamo di eseguire la AND "matematica" tra due variabili. Il simbolo è sempre & ?

l'operatore And logico in tutti i linguaggi C-like è &&, l'operatore And sui singoli bit è &.