Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Bitberechnung


Dingo - Mo 10.04.17 10:13
Titel: Bitberechnung
Grüße!

Ich quäle mich gerade mit dem Verständniss der Bitberechnung herum - tolles Thema!^^

Habe da soeben eine Aufgabe die ich 0 verstehe. Geht um folgendes:

"Enthällt 12345 den Faktor 2hoch3?"
12345 & 8
Antwort: 8

"Enthällt 12345 den Faktor 2hoch9?"
12345 & 32
Antwort 0

"Enthällt 12345 den Faktor 2hoch13?"
12345 & 8192
Antwort: 8192

Kann mir jemand mal erklären was die Aufgabe bewirkt bzw. wie man auf diese Ergebnisse kommt?

Denn wo ist 12345 eine Zweierpotenz von 8?

8 * 2 = 16
16 * 2 = 32
32 * 2 = 64
64 * 2 = 128
128 * 2 = 256
256 * 2 = 512
512 * 2 = 1024
1024 * 2 = 2048
2048 * 2 = 4096
4096 * 2 = 8192
8192 * 2 = 16384

Oder verhau ich hier gerade was komplett. -,-


Moderiert von user profile iconNarses: Topic aus C# - Die Sprache verschoben am Mo 10.04.2017 um 14:21


hydemarie - Mo 10.04.17 10:24

Auf eine Ja-Nein-Frage mit einer Zahl zu antworten halte ich im Allgemeinen für eher falsch.

Ansonsten geht es um Binärcode, nicht um Dezimalmultiplikation, wenn ich das so weit richtig verstehe. ;)
https://de.wikipedia.org/wiki/Bitweiser_Operator#UND


Ralf Jansen - Mo 10.04.17 11:03

Wenn du Dezimaldarstellung der Werte in Binär änderst und dann bitweises UND darauf anwendest (Das ist die Bedeutung von &, es ist der binäre UND Operator) erhältst du die passende Antwort.


Quelltext
1:
2:
3:
4:
   11000000111001   (12345)
&  00000000001000   (8)
   --------------
   00000000001000 = (8)


Die Stellen als Faktoren zu bezeichnen finde ich allerdings auch unglücklich/verwirrend. Kann aber auch an unzureichender mathematischer Bildung meinerseits liegen.


hydemarie - Mo 10.04.17 11:22

Das löst aber die Frage nicht, denn ein bitweises UND kannst du auf alles anwenden, die Antwort lautete also immer "Ja".


Dingo - Mo 10.04.17 11:43

Also die Antwort laut Buch wäre:

"Die Zahl 12345 enthält also die Zweierpotenzen 8 (2hoch3) und 8192 (2hoch13), nicht aber 512 (2hoch9)."

Ich finds auch etwas merkwürdig, wie man eine Ja/Nein Frage mit einer Zahl beantwortet...^^"


hydemarie - Mo 10.04.17 11:52

Im Buch steht "enthällt" mit Doppel-L? Was für ein furchtbares Buch. 8)

Zitat:
nicht aber 512 (2hoch9)


Is' richtig:


Quelltext
1:
2:
3:
4:
11000000111001 &
00001000000000 =
----------------
00000000000000


Da passt kein Bit.

Nachtrag: Die nächste Stufe wäre es übrigens, das nur anhand der Binärdarstellung von 12345 ohne dieses grundschulmäßige Untereinanderschreiben rauszufinden. Bei 2^x ist das erfreulich einfach.
Beispiel 2^9: Ist die 9+1te Stelle von rechts eine 1? :D


Dingo - Mo 10.04.17 12:07

Ich glaub jetzt versteh ichs langsam.^^


hydemarie - Mo 10.04.17 12:10

Echt? Ich nämlich nicht... :shock:


Dingo - Mo 10.04.17 14:02

Es wird Bitweise der & Operator genutzt und dann vergleichen. :)

Beispiel an 12345 und 8:


C#-Quelltext
1:
2:
3:
4:
11000000111001   (12345)
00000000001000   (8)
--------------
00000000001000


Mit &-Operator bedeutet es:

0 und 0 ergibt 0
0 und 1 ergibt 0
1 und 0 ergibt 0
1 und 1 ergibt 1

Wenn man also 12345 und 8 Gegenüberstellt und Bitweise vergleicht kommt die 8 als Zweierpotenz vor.

###########################################################

Beispiel an 12345 und 512:


C#-Quelltext
1:
2:
3:
4:
11000000111001   (12345)
00001000000000   (512)
--------------
00000000000000


Hier am Beispiel 512 wird wieder jede 0 und 1 mit der darunterliegenden vergleichen und wieder gilt:

0 und 0 ergibt 0
0 und 1 ergibt 0
1 und 0 ergibt 0
1 und 1 ergibt 1

Im Endergebnis sieht man, die 512 kommt nicht in der 12345 vor.


hydemarie - Mo 10.04.17 14:06

Wer's erklären kann, hat's verstanden. (Sofern seine Erklärung stimmt.) 8)


Dingo - Mo 10.04.17 14:22

Ist meine Antwort falsch? :D


Nersgatt - Mo 10.04.17 14:29

Vereinfacht gesagt, kann man sagen, mit dem &-Operator kann man prüfen, ob ein (oder mehrere) Bits gesetzt sind.
Die Bits, die man abfragen möchte, ist die Maske.

Ich möchte wissen, ob das 2. Bit gesetzt ist.

Zu prüfende Zahl:
1100 0010
Maske (hier zu prüfende Bits setzen)
0000 0010

Ergibt

Quelltext
1:
2:
3:
4:
  1100 0010
& 0000 0010
-----------
  0000 0010


Allgemein
Wenn x & maske = maske, dann sind alle Bits, die in der Maske gesetzt sind, auch in x gesetzt.


jaenicke - Mo 10.04.17 14:35

user profile iconDingo hat folgendes geschrieben Zum zitierten Posting springen:
Ist meine Antwort falsch? :D
Nein, das war schon genau richtig.

user profile iconNersgatt hat noch den Operator genauer betrachtet, aber was du geschrieben hast stimmte auch.


Narses - Mo 10.04.17 14:36

Moin!

user profile iconDingo hat folgendes geschrieben Zum zitierten Posting springen:
Ich quäle mich gerade mit dem Verständniss der Bitberechnung herum
Damit würde ich mich auch rumquälen, denn "Bits" kann man nämlich nicht "berechnen"... die sind 0 oder 1, fertig. 8) Wenn man mehrere davon zusammenfasst und diesen eine Bedeutung zuweist, dann können wir auch mit dem Rechnen anfangen. :P

user profile iconDingo hat folgendes geschrieben Zum zitierten Posting springen:
tolles Thema!^^
Allerdings! :D (ernst gemeint!)

user profile iconDingo hat folgendes geschrieben Zum zitierten Posting springen:
Habe da soeben eine Aufgabe die ich 0 verstehe.
Dann schreiben wir das doch mal etwas anders auf, dann wird das auch sofort verständlich. ;)

user profile iconDingo hat folgendes geschrieben Zum zitierten Posting springen:
"Enthällt 12345 den Faktor 2hoch3?"
Bevor wir das tun, muss ich allerdings nochmal über das Buch ablästern (von dem Typo mal ganz abgesehen): wer schon "Faktoren" mit "Summanden" verwechselt, sollte besser keine Bücher schreiben... :roll:

12345 ist die "Kurzschreibweise" von:
1*10^4 + 2*10^3 + 3*10^2 + 4*10^1 + 5*10^0 :think:

Wenn man das jetzt aber nicht zur Basis 10, sondern zur Basis 2 haben möchte (weil Computer nun mal mit Zweierpotenzen besser "funktionieren"), dann ergibt das:

11000000111001 und das ist die "Kurzschreibweise" für:

1*2^13 +
1*2^12 +
0*2^11 +
0*2^10 +
0*2^9 +
0*2^8 +
0*2^7 +
0*2^6 +
1*2^5 +
1*2^4 +
1*2^3 + <-- 2^3=8 ist in der Summe enthalten
0*2^2 +
0*2^1 +
1*2^0

Damit sollten sich die restlichen "Fragen" auch leicht "lösen" lassen. :zwinker:

cu
Narses


hydemarie - Mo 10.04.17 14:43

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
"Bits" kann man nämlich nicht "berechnen"... die sind 0 oder 1, fertig. 8)


Nicht unbedingt! [https://de.wikipedia.org/wiki/Ternärer_Computer]


Narses - Mo 10.04.17 14:50

Sorry, vergiss mal kurz die Farbe meines Namens und die Funktion dahinter, aber das muss jetzt raus:

Vernünftig erklären kannste´s nicht, aber klugscheißen geht immer. :autsch:


hydemarie - Mo 10.04.17 14:57

Sorry, vergiss mal kurz die Farbe meines Namens und die Funktion dahinter, aber das muss jetzt raus:

Lieber gar nicht erklären als falsch erklären. :mahn:

Nachtrag:
Den Vorwurf, ich würde etwas "nicht vernünftig erklären", empfinde ich als Affront. Dingo hat's nach eigener Aussage verstanden, bevor du dich hier überhaupt eingemischt konstruktiv eingebracht hast.