| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
Diskussion: Bit-Operatoren, noch kleine Probleme. im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo, ich programmiere seit mittlerweile 1 Jahr, aber ich hatte schon immer ein Problem mit den Bit-Operatoren. Nun habe ...
![]() |
| | #1 (permalink) | ||
| Registriert seit: 04.02.11 ![]() Likes: 0 | Anzeige Hallo, ich programmiere seit mittlerweile 1 Jahr, aber ich hatte schon immer ein Problem mit den Bit-Operatoren. Nun habe ich einfach ganz schnell ein Programm geschrieben, dass überprüfen soll ob die Bits 3, 5, 9 gesetzt sind. Das Programm Zitat:
Das Programm 2 Zitat:
Danke im voraus | ||
| | |
| | #2 (permalink) |
| Registriert seit: 04.12.03 ![]() Likes: 11 |
|
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Member of Honour ![]() Registriert seit: 05.03.08 ![]() ![]() ![]() ![]() ![]() Likes: 246 | Code: if( x & (3) && (5) && (9) ) 4 = 100 5 = 101 ... 16 = 1 000 ... 256 = 1000 0000 Außerdem muss es Code: if( (x&4) && (x&16) && (x&256) ) Geändert von xrayn (04.02.11 um 16:05 Uhr) |
| | |
| | #4 (permalink) |
| Member of Honour ![]() |
macht auch keinen Sinn... hab zwar lange kein C mehr gecodet aber mal rein von der logischen Herangehensweise: als erstes müsstest du mal wissen, welche Zahlen hinter "Bit 3", "Bit 5" oder "Bit 9" stecken... Bit 3 = 0b0000000100 = 4 dezimal (oder 0x004 hex) Bit 5 = 0b0000010000 = 16 dezimal (oder 0x0010 hex) Bit 9 = 0b0100000000 = 256 dezimal (oder 0x0100 hex) Was genau machen jetzt die binären Operatoren? Beim bitweise UND werden beim Ergebnis alle Bits zu "1", bei welchen in BEIDEN Zahlen das entsprechende Bit "1" ist. Bsp: wir möchten überprüfen, ob in der Zahl 25 das Bit 5 gesetzt ist: Code: 25 dez = 0b00011001
& bit 5: 0b00010000
--------------------
0b00010000 Code: x & 0x0010 und wenn alle 3 Bits gesetzt sein müssen fragst du das also folgendermaßen ab: Code: if ( (x&4)!=0 && (x&16)!=0 && (x&256)!=0) {
printf("Alle 3 Bits kommen in Zahl %d vor", x);
} else {
printf("Nee du, kommen nicht alle drei vor");
} Code: 256+16+4 = 276 Code: 0b0100000000 +0b0000010000 +0b0000000100 --------------- 0b0100010100 Code: if ((x&276)!=0) {
printf("Alle 3 Bits kommen in Zahl %d vor", x);
} else {
printf("Nee du, kommen nicht alle drei vor");
} |
| | |
| | #5 (permalink) | |
| Member of Honour ![]() Registriert seit: 05.03.08 ![]() ![]() ![]() ![]() ![]() Likes: 246 | Vielleicht trägt dieses Programm zum Verständnis bei: Code: #include <stdio.h>
#include <stdbool.h>
int main(void)
{
int x = 276;
int i;
printf("dec(%d) = bin(", x);
for(i=15; i >= 0; i--)
printf("%d ", (x>>i) & 1);
printf(")\n%d\n", ((x & 4) && (x & 16) && (x & 256)));
printf("%d\n", (4 | 16 | 256));
printf("%d\n", true && 3);
printf("%d\n", false && 3);
printf("%d\n", true && 0);
return 0;
} Ausgabe: Zitat:
Geändert von xrayn (04.02.11 um 16:05 Uhr) Grund: Ausgabe hinzugefügt | |
| | |
| | #6 (permalink) |
| Registriert seit: 06.06.09 ![]() Likes: 6 | Wesentlich leichter lesbar ist - wie ich finde - ein Vergleich mit Hilfe von Bitshifts: Code: if ( (x & (1<<2)) != 0 &&
(x & (1<<4)) != 0 &&
(x & (1<<8)) != 0 )
{
printf("Alle 3 Bits kommen in Zahl %d vor", x);
}
else
{
printf("Nee du, kommen nicht alle drei vor");
}
__________________ A good programmer looks both ways before crossing a one-way street. Die Politik kann uns nur für so dumm verkaufen, wie wir sind. |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |