"Bitweise" einen int wiedergeben



  • Hallo
    Ich habe mal eine Frage

    wenn 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 = 11

    also 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 schreibfehler

    int 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");
    				}
    

Anmelden zum Antworten