Newsgroup: it.comp.lang.c
Titolo: #define binario

Ciao,
sapete se è possibile fare una cosa come
#define MIODATO 0xFF
ma passando il valore direttamnete in binario?
Tipo #define MIOBIN 10001101
Ovvero, come si puo' inizializzare una variabile
con un valore binario? Devo per forza calcolarmi tutti gli hex?
Grazie mille!
Ciao...

 Ciao...
Ceo
Mtc`

 semplice
Oppure se proprio si vuole si puo' fare una schifezza tipo (sconsigliata):
#define BIN_BYTE(a,b,c,d,e,f,g,h) 
(((a&1)<<7)|((b&1)<<6)|((c&1)<<5)|((d&1)<<4)| \
                             ((e&1)<<3)|((f&1)<<2)|((g&1)<<1)|(h&1))
e poi nel codice scrivere:
num = BIN_BYTE(0,1,1,0,1,0,0,1);
printf("%d\n", num);
o dato il tuo esempio:
#define MIOBIN BIN_BYTE(1,0,0,0,1,1,0,1)
....
printf("%d\n", MIOBIN);
Ma come ti e' stato consigliato e' molto meglio usare i valori esadecimali 
in genere e se riesci evita le macro, creano quasi solo problemi (#define).
Tommaso

                              ((e&1)<<3)|((f&1)<<2)|((g&1)<<1)|(h&1))
A questo punto val la pena scrivere:
#define BIN_BYTE(a,b,c,d,e,f,g,h) 
  ((h)+2*((g)+2*((f)+2*((e)+2*((d)+2*((c)+2*((b)+2*(a))))))))
;-)
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ;-)
Ok vai, aperto il contest a chi trova il modo piu bizzarro di
implementarlo. 
#define  BIN_BYTE( a )    \
\
(((a[0]-'0')<<7)|((a[1]-'0')<<6)|((a[2]-'0')<<5)| ((a[3]-'0')<<4)| \
((a[4]-'0')<<3)|((a[5]-'0')<<2)|((a[6]-'0')<<1)| (a[7]-'0'))
e poi..
#define MIOBIN  BIN_BYTE( "10011010" )
Ceouz!:)
Matic

 implementarlo. 
#define BIN_BYTE(x)(((x)&1)+(((x)/10)&1)*2+(((x)/100)&1)*4+\
(((x)/1000)&1)*8+(((x)/10000)&1)*16+(((x)/100000)&1)*32+\
(((x)/1000000)&1)*64+(((x)/10000000)&1)*128)
da usare come
BIN_BYTE(11101)
o
BIN_BYTE(10010100)
ma non come
BIN_BYTE(01110) per ovvi motivi ottali.
oppure, usando sempre 8 caratteri
#define  BIN_BYTE(a) \
(-('0'*255)+(a[0]<<7)+(a[1]<<6)+(a[2]<<5)+\
(a[3]<<4)+(a[4]*8)+(a[5]*4)+(a[6]*2)+a[7])
int a = BIN_BYTE("00101111");
ciao,
g.

 #define MIOBIN  BIN_BYTE( "10011010" )
Vabbeh, ok, se dobbiamo fare mongolate error/bug-prone ridicole (vedi ad 
esempio se la stringa che passi nel tuo esempio e' "101", piu' breve di 8 
chars), allora:
#define BIN_BYTE(bin) \
(((bin%10)?(1):(0))\
|(((bin/10)%10)?(1<<1):(0))\
|(((bin/100)%10)?(1<<2):(0))\
|(((bin/1000)%10)?(1<<3):(0))\
|(((bin/10000)%10)?(1<<4):(0))\
|(((bin/100000)%10)?(1<<5):(0))\
|(((bin/1000000)%10)?(1<<6):(0)))\
|(((bin/10000000)%10)?(1<<7):(0))
#define MIOBIN BIN_BYTE(10001101)
questo almeno funziona con 101 e funziona sicuramente fino al limite del 
byte: 11111111, su macchine a 32bits.
Inoltre non hai bisogno ne di separare i numeri con le virgole ne di mettere 
il numero dentro una stringa.....
Ovviamente lo sconsiglio altamente ;-)
Direi che con le mongolate possiamo smettere e chiuderei il "contest".
Per riassumere, la cosa migliore e' usare la notazione hex con affianco il 
numero binario come commento al limite.
Tommaso

 Direi che con le mongolate possiamo smettere e chiuderei il "contest".
1) Continuo a non gradire il tuo modo di esprimerti.
2) Se qualcuno e' interessato non vedo perche' non possa continuare...
ciao,
v.

 2) Se qualcuno e' interessato non vedo perche' non possa continuare...
Perche' altrimenti il thread diventa noioso come questa tua discussione che 
stai sollevando. Finiamo qui anche questa per favore.
Ciao,
Tommaso

 cosi' volgare.
Lo e' per me e per i miei amici down. Pero' hai ragione, sono ormai
l'unico a essere cosi' sensibile da non usare epiteti del genere.
Quindi ti perdono. Peace. Respect. Fernet.
v.

 l'unico a essere cosi' sensibile da non usare epiteti del genere.
Siamo in due.
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Siamo in due.
Siamo in tre e probabilmente molti di piu'... Lungi da me voler essere 
offensivo nei confronti delle persone down.
Non credo di essere stato assolutamente offensivo. Di questo passo dire 
stupidaggine o stupidata e' offensivo nei confronti degli stupidi, scemata 
degli scemi, pazzia dei pazzi e cavolata nei confronti dei cavoli.
Probabilmente l'epiteto non era dei piu' felici, ma da qui ad essere 
offensivo... Ad ogni modo onde evitare problemi non lo usero' piu' (e 
francamente non credo nemmeno di averlo mai usato prima ;-). Rimango 
tuttavia della mia idea che la tua reazione sia stata un pochino esagerata.
Tommaso

 esagerata.
Non credo proprio. Ho un nipote affetto da sindrome di Down e
di persone che si sono permesse di fare dello "spirito" ne ho
incontrate troppe. L'argomento in ogni caso e' off topic.


 L'argomento in ogni caso e' off topic.
Nonostante l'argomento sia off-topic, visto che mi firmo con nome e cognome 
(al contrario di molti altri, tra cui colui che ha iniziato questa 
polemica), ci tengo a precisare una ultima volta pubblicamente, che ho usato 
tale termine puramente come aggettivo, senza voler mancare affatto di 
rispetto a nessuno. Di questo passo, visto che ognuno ha una propria storia 
personale, non si potra' piu' usare nessun aggettivo.
Come gia' ho detto la scelta del termine non e' stata delle piu' felici, e 
non e' nemmeno un termine che sono solito usare, ma continuo a pensare che 
la vostra reazione oltre essere stata eccessiva sia infondata a mio avviso. 
Sinceramente quando ho scritto quella frase non avevo nemmeno associato il 
termine "mongolata" alle persone affette da sindrome di down, l'ho scritto 
cosi' istintivamente per il significato di "cose non serie" (non dico di 
"stupidata" altrimenti qui parte un'altra polemica). Una leggerezza che mi 
e' costata cara!
Francamente credo siate stati piu' offensivi voi ad accusarmi di fare dello 
spirito nei confronti delle persone down (cosa che chiaramente non ho voluto 
fare) che io ad usare tale termine poco felice.
Spero questo messaggio chiarisca ogni dubbio e che possa inoltre finalmente 
chiudere questo thread.
Concludo scusandomi per la scelta infelice del termine.
Tommaso