neongelbe
Anmeldungsdatum: 10. September 2009
Beiträge: Zähle...
|
Hi, ich stehe grade vor einer neuen Frage, auf die ich irgendwie Antworten finde, die ich nicht verstehe, nämlich: Wie wird bitweise was genau verschoben und weshalb? Am besten wäre eine Python erklärung, da bin ich etwas eingelesen. Aber auch über andere Antworten bin ich erfreut. Also, was bringt das bitweise Verschieben, nach links, rechts, wohin auch immer? ☺ Danke, Peace. 😉
|
762378
Anmeldungsdatum: 7. September 2010
Beiträge: 127
|
Du weißt was Binärzahlen sind, oder? '1' ist '0001', schiebe ich die 1 um einen nach links mit '<<', habe ich '0010', und das sind, tada, '2', noch einen nach links macht '0100', das macht '4', und so weiter und so fort... Hättest du gesuchmaschind hättest du das gefunden: http://wiki.python.org/moin/BitwiseOperators Alle Klarheiten beseitigt?
|
neongelbe
(Themenstarter)
Anmeldungsdatum: 10. September 2009
Beiträge: 136
|
Bis dahin, ja. Irgendwie. ☺ Ich kann mir aber immer nocht nicht vorstellen, weshalb ich etwas bitweise verschieben wollen würde? ☺
|
-schumi-
Anmeldungsdatum: 24. August 2010
Beiträge: 254
Wohnort: Bayern
|
Ich kann mir aber immer nocht nicht vorstellen, weshalb ich etwas bitweise verschieben wollen würde?
Ich PC-Bereich wird mans wohl nicht sehr häufig brauchen. Aber bei Mikrocontroller ist es sehr verbreitet. Z.B. wenn ich ein LCD im 4Bit-Modus ansteuern möchte: Dann hab ich ein 8Bit-Byte, das die Daten (Zeichen fürs Display etc) enthält. Das kann man dann in 2* 4Bit aufspalten: | unsigned char lcd_data='B';
low_bits = lcd_cata & 0b00001111; //Die unteren vier Bits
high_bits = (lcd_data & 0b11110000) >> 4; // Die oberen vier Bits ausmaskieren und nach rechts verschieben
|
Selbiges System, wenn man z.B. eine 16Bit-Zahl über die Serielle Schnittstelle senden möchte, die aber nur 8Bit breit ist. (Brauchst dir aber nichts zu denken dass du das nicht kennst, ich musste es sogar meinem Ausbilder erklären^^ (lerne Elektroniker für Geräte und Systeme)) Gruß
|
Vain
Anmeldungsdatum: 12. April 2008
Beiträge: 2510
|
neongelbe schrieb: Ich kann mir aber immer nocht nicht vorstellen, weshalb ich etwas bitweise verschieben wollen würde? ☺
Oder mal schnell 2^d ausrechnen, falls es sich nur um positive Integer handelt:
„Hinter den Kulissen“ braucht man Bitshifts auch auf dem Desktop recht oft. Zum Beispiel, wenn du auf niedriger Ebene mit Farben rechnest. Häufig werden in einem 32 Bit Integer vier Kanäle zu je 8 Bit gespeichert, zum Beispiel in der Reihenfolge „Alpha“, „Rot“, „Grün“, „Blau“. Wenn du mit einer solchen Zahl etwas anstellen willst, musst du shiften, verunden und verodern (schöne Verben, nich’ wahr? 😉):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | #include <stdio.h>
int main(int argc, char *argv[])
{
/* Alpha = 255, Rot = 100, Grün = 128, Blau = 3. */
unsigned int argb32 = 255 << 24 | 100 << 16 | 128 << 8 | 3;
printf("%u\n", argb32);
/* Extraktion: */
unsigned int alpha = (argb32 & 0xFF000000) >> 24;
unsigned int red = (argb32 & 0x00FF0000) >> 16;
unsigned int green = (argb32 & 0x0000FF00) >> 8;
unsigned int blue = (argb32 & 0x000000FF);
printf("%u %u %u %u\n", alpha, red, green, blue);
return 0;
}
|
|