ubuntuusers.de

2 << 2 ergibt 8 - bitweises Verschieben für Dummis

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

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-

Avatar von -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:

1
2
3
4
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

Avatar von 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:

1
int foo = 1 << d;

„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;
}
Antworten |