Binärzahlen eingeben???
-
Hallo,
kleines Problem:
Hexwerte kann ich einfach zuweisen, z.B.
int iZahl = 0xA9;
Mit 'o' funktioniert das ganze auch oktal, wie aber gebe ich Binärzahlen ein?
Mit 0b0011010 jedenfalls nichtGruß und Danke.
-
Geht nicht über Literale...
-
Ein bitset.
-
Danke. Bitset ist ein guter Tip. Hätte ich nicht gedacht, das man für "so eine Kleinigkeit" Templates bemühen muss
-
In C++ geht das nicht so einfach da man es nicht als einfache Zahl angeben kann. Eine Möglichkeit die ich hin und wieder mal benutze ist:
#define Bin(a,b,c,d,e,f,g,h) ((a<<7)|(b<<6)|(c<<5)|(d<<4)|(e<<3)|(f<<2)|(g<<1)|h) //... char a=Bin(1,0,1,0,0,1,1,0);
Ich glaub nicht, dass das ohne run-time overheat besser machbar ist. Lass mich aber gern belehren.
-
Jetzt wo ich drüber nachdenke wäre das wohl doch besser
:
#define Bin(n) (((n/1)%10)<<0| \ ((n/10)%10)<<1| \ ((n/100)%10)<<2| \ ((n/1000)%10)<<3| \ ((n/10000)%10)<<4| \ ((n/100000)%10)<<5| \ ((n/1000000)%10)<<6| \ ((n/10000000)%10)<<7| \ ((n/100000000)%10)<<8| \ ((n/1000000000)%10)<<9| \ ((n/10000000000)%10)<<10|\ ((n/100000000000)%10)<<11|\ ((n/1000000000000)%10)<<12|\ ((n/10000000000000)%10)<<13|\ ((n/100000000000000)%10)<<14|\ ((n/1000000000000000)%10)<<15) //... int a=Bin(101101);
Sollte alles at compile-time errechnet werden.
-
Irgendwer schrieb:
int a=Bin(101101);[/cpp]
Nehmen wir an:
int a=Bin(101101); int b=Bin(010010);
Irgendwie suboptimal
-
MaSTaH schrieb:
Geht nicht über Literale...
...aber gut mit Templates:
template <int Value> struct is_binary_digit; template <> struct is_binary_digit<0> { enum {Result = 0}; }; template <> struct is_binary_digit<1> { enum {Result = 1}; }; template <int Value> struct binary; template <> struct binary<0> { enum {Result = 0}; }; template <int Value> struct binary { enum {Result = is_binary_digit<Value%10>::Result + 2 * binary<Value/10>::Result}; }; int main() { int i = binary<101>::Result; cout << i << endl; // 5 }
-
Du hast ja da Hexzahlen angegeben...
Soweit ich weis, werden Binär-Variablen/Konstanten mit "0%" initialisiert...
Des wäre dann z.B. :
const int a=0%01001011
weis nicht, ob das sk ganz zulässig ist...Dem Prinzip nach geht's so in etwa...
-
BloodLord schrieb:
Du hast ja da Hexzahlen angegeben...
Soweit ich weis, werden Binär-Variablen/Konstanten mit "0%" initialisiert...
Der 1. April ist lange vorbei
-
BloodLord schrieb:
const int a=0%01001011
weis nicht, ob das sk ganz zulässig ist...nicht in c++. afair gabs assembler, die so ähnliches nehmen.
bei
const int a=0%01001011;
macht er folgendes:
- % ist der modulo-operator
- integer-literale, die mot 0 anfangen, aber nicht mit 0x sind okal.
also
const int a=0%01001011;const int a=0%262665;
const int a=0;