Originariamente inviato da /* Coder */
Certamente, le macchine moderne lavorano sugli "ottetti".
Il tipo BOOL è un typedef a qualcosa. E' comodo pensarlo come un bit solo a livello di programmazione, ma in realtà non lo potrà mai essere.
Questo per il fatto che non puoi scrivere un bit in memoria, al massimo puoi sovrascrivere gli altri 7 e modificarne 1, ma tu scrivi sempre almeno 1 byte.
Fai partire photoshop, apri una immagine e guarda quanto occuapa in memoria, ci sarà un motivo.
Per il fatto che le immagini pesino tanto è anche perchè sono a colori...
L'array per una lavagna tipo quella che ho fatto, ma che supporti i colori deve per forza usare tre array (uno per colore) di tipo char o comunque deve sicuramente usare qualcosa di più di un bool...

Usa | e & con un tuo sistema di coordinate se vuoi consumare meno risorse.

Non puoi allocare 1 bit in memoria.

Ciao !
Già neppure in assembler lo si può fare, ma credevo che con le variabili di tipo bool (o come minimo con gli array di tipo bool) pensasse il comilatore a usare | e & in questo modo:
array[0] = il primo bit del primo char
array[1] = il secondo bit del primo char
...
array[8] = l'ottavo bit del primo char
array[9] = il primo bit del secondo char

e quindi
array[8] = true
il compilatore lo avrebbe tradotto in
primo_char | 1
e
array[7] = false
sarebbe stato tradotto in
primo_char & 253
Ho sempre pensato che agisse in questo modo, se no dov'è la comodità del tipo bool?
Chissà se con l'overloading dell'operatore [] per il tipo bool non riesca a fare qualcosa ...
Bho, domani provo, ora son fuso...

Grazie per i chiarimenti




PS: Ho visto che anche i campi di bit soffrono dello stesso problema:
char x : 4;
occupa un intero byte... come un char completo Ma allora a cosa servono? :master: :master: :master: Non ne vedrei alcuna utilità se non quella di perfezionare il programma (facendo diminuire le risorse impiegate) in casi estremi tipo il mio