# bits spiegeln



## dangyn (4. Dezember 2008)

Hallo Leute,

weiß jemand wie man die bits spiegeln kann
z.B. dass aus (11100110)                                    (01100111) wird ?

Über jeden Vorschlag würde ich mich freuen.

Danke!


----------



## deepthroat (4. Dezember 2008)

Hi.

Du könntest z.B. die Bits nach rechts rausschieben und in eine zweite Variable nach links reinschieben.

Gruß


----------



## vfl_freak (4. Dezember 2008)

Moin,

klar - man kann es durch den Operator "~" (bitweises Komplement)!

```
Beispiel:
int i = 4; // 0000 0100
~i;        // 1111 1011
```

Gruß
Klaus


----------



## deepthroat (4. Dezember 2008)

vfl_freak hat gesagt.:


> Moin,
> 
> klar - man kann es durch den Operator "~" (bitweises Komplement)!


Ich glaub du hast die Aufgabe nicht ganz verstanden... 

Gruß


----------



## vfl_freak (4. Dezember 2008)

Moin deepthroat,

ja ... jetzt wo Du es sagst ..... 

Bin wohl noch nicht ganz wach , sonst hätte ich die Bitmuster besser erkannt ....

Werde mir erst mal 'nen Kaffee holen 

Gruß
Klaus


----------



## dangyn (4. Dezember 2008)

deepthroat hat gesagt.:


> Hi.
> 
> Du könntest z.B. die Bits nach rechts rausschieben und in eine zweite Variable nach links reinschieben.
> 
> Gruß



Um wie viel bits muss ich es nach rechts rausschieben und um wie viel nach links


----------



## vfl_freak (4. Dezember 2008)

na, halt um alle, die gespiegelt werden sollen ;-)


----------



## dangyn (4. Dezember 2008)

das wird wohl nicht klappen. es sollen alle bits gespiegelt werden


----------



## vfl_freak (4. Dezember 2008)

ok, dann halt alle ....

Irgendwie verstehe ich Deine Frage nicht! ;-]

Gruß
Klaus


----------



## dangyn (4. Dezember 2008)

vfl_freak hat gesagt.:


> ok, dann halt alle ....
> 
> Irgendwie verstehe ich Deine Frage nicht! ;-]
> 
> ...



ich habe z.B: 1110 0110
jetzt lese ich es von rechts nach links.
wenn ich es tue, habe ich: 0110 0111.
und das will ich haben
0110 0111, also das MSB wird jetzt zu LSB.


----------



## deepthroat (4. Dezember 2008)

Wie vfl_freak bereits sagte, mußt du einfach alle Bits der Variablen spiegeln.

Die Größe in Bytes der Variablen kannst du mit dem sizeof Operator ermitteln, die Anzahl der Bits die ein Byte besitzt ist in der Konstante CHAR_BIT (#include <limits.h>) enthalten (ein char ist immer ein Byte groß).

Gruß


----------



## Thomas Darimont (4. Dezember 2008)

Hallo,

schau mal hier:

```
// ReverseBits.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include "stdafx.h"
#include <iostream>

int reverseBits(int input) {

        int output = 0;
        do{
            output <<= 1;
            if(input % 2 != 0){
                output |= 1;
            }
        }while((input = input / 2) > 0);
        
        return output;
    }

int _tmain(int argc, _TCHAR* argv[])
{
    int input = 230; // 11100110
    int output = reverseBits(input);
    std::cout << output << std::endl; // 103 -> 01100111

    return 0;
}
```
Kann man natürlich auch viel effizienter (viel komplizierter ausdrücken) ... siehe Bit Manipulation in the Art of cumpoter programming...

Gruß Tom


----------

