002
27.10.2011, 23:59 Uhr
0xdeadbeef
Gott (Operator)
|
Zwei Dinge: Zum einen musst du bitNum in beiden Funktionen gleich behandeln, d.h. entweder beide male bitNum - 1 rechnen und die Bits 1-8 nennen oder beide male nackt bitNum verwenden und die Bits 0-7 nennen. Ich empfehle letzteres; ist bei Arrays ja auch nicht anders. Zum zweiten wirst du mit binärem Oder allein nicht ein bestimmtes Bit auf 0 setzen können.
Machen könnte man das beispielsweise so:
C++: |
#include <iostream>
typedef unsigned char u8;
bool get_bit(u8 var, unsigned n) { return (var >> n & 1) == 1; }
// Per Referenz übergebener erster Parameter wird hier geändert. // Falls das nicht gewollt ist, ist das aber natürlich leicht zu ändern. void set_bit(u8 &var, unsigned n, bool new_val) { u8 mask = ~(u8(1) << n); var = (var & mask) | (new_val << n); }
void binprint(u8 x) { for(int i = 0; i < 8; ++i) { std::cout << unsigned(get_bit(x, i)); } std::cout << '\n'; }
int main() { u8 x = 12;
binprint(x); set_bit(x, 4, 1); binprint(x); set_bit(x, 3, 0); binprint(x); set_bit(x, 0, 1); binprint(x); }
|
-- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |