"Bitweise" einen int wiedergeben
-
Hallo
Ich habe mal eine Fragewenn ich schreibe int a=2; dann ist die zwei ja eigentlich abespeichert als 0000 0011.
was muss ich tun um mit dann die 2 bitweise als 0 und 1 ausgeben kann? bzw wenn ich einen zeiger auf ein belibiges objekt habe diese als 0 und 1 auzzugeben??
-
0 = 0
1 = 1
2 = 10
3 = 11also nein, 2 ist 10 binaer.
wenn du nun die bits haben willst, musst du schauen ob das jeweilige bit gesetzt ist. mit CHAR_BIT*sizeof(i) bekommst du die anzahl der bits die i hat heraus.
mit
i & 1<<n
kannst du testen ob das nte bit gesetzt ist.der rest ist uebung fuer den lernwilligen
-
so richtig raff ich das nochnicht...
also binär is klar, war ein schreibfehlerint i =100; //die zahl will ich bitweise ausgeben int n=0; int b=0; //soll die adresse der einzelnen bits enthalten n=sizeof(i); // was macht das char_bit??? // mit * geht das nicht // und jetz denke ich mir das irgendwie so while (b<n){ if (1&b) printf ("1") ; else printf ("0") ; b++;}
aber das funzt ja nicht, weil das b ja irgendwie die adresse des ersten bits enthalten muss... und wen ich da was mit zeigern mache dann enthält der doch irgendwie nur die adresse der gesamten int????
ich verzweifle???
-
CHAR_BIT - google mal danach - ist ein limits.h definiert
Es gibt an - oh wunder - wieviele bits ein char hat.
sizeof gibt die größe eines variablen in chars zurück.bits pro char mal anzahl chars = gesamte bit anzahl
Und dann schau dir mal meinen Code an:
i & 1<<n& ist bitweises UND.
mit 1<<n setzt man das nte bit auf 1 den rest auf 0.
Man hat also eine bitmaske mit der man super mit & vergleichen kann ob das eine bit gesetzt ist. da x&0 immer 0 ergibt und nur 1&1 true ist.
-
Alternativ kannst du dir die 0er und 1er auch ausrechnen:
Beispiel 23
23 : 2 = 11 R 1
11 : 2 = 5 R 1
5 : 2 = 2 R 1
2 : 2 = 1 R 0
1 : 2 = 0 R 1=> 23 entspricht 10111
-
[quote="Shade Of Mine"]
Und dann schau dir mal meinen Code an:
i & 1<<n& ist bitweises UND.
mit 1<<n setzt man das nte bit auf 1 den rest auf 0.
quote]
so, da mit der größe ist jetz klar. Eigentlich könnte ich die ja manuell auch vorgeben wenn ich genau weiß welchen wert ich ausgeben will?????
aber: i & 1<<n wenn ich damit zb vergleichen will ob das dritte bit 1 oder 0 ist. dann muss in i auch das dritte bit meiner Zahl stehen ?! aber i enthät doch aber meine gesamte zahl?! int i=2 ---> i= 00000000 00000010
-
neuling666 schrieb:
aber: i & 1<<n wenn ich damit zb vergleichen will ob das dritte bit 1 oder 0 ist. dann muss in i auch das dritte bit meiner Zahl stehen ?! aber i enthät doch aber meine gesamte zahl?! int i=2 ---> i= 00000000 00000010
bei 'ner und-verknüpfung zählen eben nur die einsen. nullen in deinem vergleichsmuster setzen die ergebnisbits an gleicher stelle automatisch auf 0. daher wird immer nur ein bit geprüft, wenn du mit 1<<n testest.
-
n=CHAR_BIT*sizeof(i); for (x=n;x>=0;x--){ if (i & (1<<x)) printf("1"); else printf("0"); }