Re: C++ Hilfe
Könnte ich, ja.
Werde ich aber nicht... du musst das selbst lernen...
1.: Komm mit der Binärdarstellung klar... und lern, wie du nur mit Zettel und Stift dezimal in binär umwandelst (und umgekehrt).
2.: Bitoperationen.
2.a: Bitoperationen mit einer Bitmask.
2.a.I: NOT x: ~x
NOT kehrt alle Bits einer Zahl um. Gesetzte Bits werden gelöscht und umgekehrt.
Im Bereich der vorzeichenbehafteten Zahlen gilt: ~x == -(x+1)
0011010111011010 | x
1100101000100101 | ~x
2.a.II: SHL (SHift Left): x << n
SHL setzt jedes Bit in den Zustand, in dem das nächstniedrigwertigere Bit sich befand. Das least significant Bit wird mit 0 gesetzt.
Ein Leftshift um n Stellen entspricht im Prinzip einer Multiplikation um 2^n, allerdings fallen die vordersten Stellen weg, wenn das Ergebnis zu gross ist.
Es gilt: x << n == (x * pow(2^n)) % (2^BITS_IN_X)
0011000100100000 | x
0110001001000000 | x << 1
1100010010000000 | x << 2
1000100100000000 | x << 3
2.a.III: SHR (SHift Right): x >> n
SHR setzt jedes Bit in den Zustand, in dem das nächsthöherwertigere Bit sich befand. Das most significant Bit wird mit 0 gesetzt.
Ein Rightshift um n Stellen entspricht im Prinzip einer Division durch 2^n, wobei ein eventueller Rest wegfällt.
Im Bereich der nicht vorzeichenbehafteten Ganzzahlen gilt: x >> n == floor(x / 2^n)
100001100010010 | x
010000110001001 | x >> 1
001000011000100 | x >> 2
2.b: Bitoperationen mit zwei Bitmasks.
2.b.I: AND: x & y
Im Ergebnis sind nur die Bits gesetzt, die sowohl in x als auch in y gesetzt sind.
Es gilt: GESETZTE_BITS(x & y) <= MIN(GESETZTE_BITS(x),GESETZTE_BITS(y))
0111010010101010 | x
1001010111101011 | y
0001010010101010 | x & y
2.b.II: OR: x | y
Im Ergebnis sind alle Bits gesetzt, die in wenigstens einer der beiden Bitmasken gesetzt sind.
Es gilt: GESETZTE_BITS(x | y) >= MAX(GESETZTE_BITS(x),GESETZTE_BITS(y))
Falls gilt: x & y = 0, dann gilt zudem: x | y = x + y
0111010010101010 | x
1001010111101011 | y
1111010111101011 | x | y
2.b.II: XOR: x ^ y
Im Ergebnis sind nur die Bits gesetzt, die in x und y unterschiedlich sind. Stimmen die Bits von x und y überein ist das Bit im Ergebnis gelöscht.
Es gilt: x ^ y = ((x|y) & ~(x&y))
Falls gilt: x & y = 0, dann gilt zudem: x | y = x ^ y [= x + y]
0111010010101010 | x
1001010111101011 | y
1110000101000001 | x ^ y
Eigentlich sollte dir das für deine Aufgabe ausreichen.