Ho una macro che sembra qualcosa di simile:"Bitwise E" e Sinistra-Imbottitura in C++
Foo(x) ((x - '!') & 070)
Se chiamo il seguente codice:
Foo('1') => 16
Tuttavia, se io chiamo la codice seguente:
(('1' - '!') & 70) => 0
Quindi la mia domanda è, cosa sta succedendo qui? Perché il calcolo x & 070
viene calcolato su x
ma x & 70
su 0?
La mia ipotesi è che lo 0 in più a sinistra stia forzando 60 a prendere 2 byte anziché 1. In tal caso, il bit a bit & non sarebbe il seguente?
0000 0000 0001 0000 '16
0000 0000 0100 0110 & '70
-------------------
0000 0000 0000 0000
sapevo che la risposta a questa (0 prefix = costante ottale) ma non posso onestamente dico in più di 20 anni di programmazione in C, non l'ho mai visto usato. È solo una di quelle cose che sembra provenire da un periodo in cui sarebbe stato utile, forse qualcosa da fare con le macchine teletype o qualsiasi altra cosa. Come ragazzo incorporato, sono sempre seccato che non ci sia qualcosa come un prefisso "b" per le costanti binarie (sì, ho i miei modi per farlo in C & C++, peccato che non sia incorporato nella lingua). – Dan