Warum kommt bei der deklaration dieser Variablen was anderes raus als geschrieben?

Bugfrei369  10.10.2021, 04:04

Da Du das nicht weist hast Du noch nicht wirklich programmiert oder?

woqjoiqwd2 
Fragesteller
 10.10.2021, 04:06

nein leider nicht, aber danke dir.

4 Antworten

Ich erkläre es mal mit einer kleinen Zahl (Dezimal). Die Schritte sind immer die gleichen, egal wie viele Stellen die Zahl hat.

Ich erkläre, Du schreibst mit:

748 in Dezimal -> Binär. Wir fangen bei der 7 an. Wenn diese ungerade ist (also man sie nicht direkt durch 2 teilen kann), ziehe 1 ab und mache unter der nächsten Ziffer ein Punkt. Es entsteht also

648 (hier habe ich die 1 wirklich von der 7 abgezogen)
.

Der Punkt erinnert dich später daran, 5 hinzu zu addieren. Jetzt teilst Du die 6 durch 2 und schreibst also 3 unter die 6:
648
3 .
Nun kommt die 4 dran, diese ist durch 2 teilbar. 4 / 2 = 2, durch den Punkt kommen 5 hinzu.
648
37
Nun die letzte Ziffer hier kommt (WICHTIG) zuerst die Frage, "wieviel muss ich abziehen um sie teilen zu können". In dem Fall (8) muss ich 0 abziehen. Du notierst dir die 0 irgendwo auf dem Papier (die nächsten Zahlen kommen links vor der 0, also schreib sie irgendwo rechts hin).

Nun noch die 8 durch 2 teilen = 4
648
374

Nun das gleiche mit der 374. 3 muss 1 abgezogen werden, unter die 7 ein . Dann hast du 2 und 2 / 2 = 1, unter der 3 die 1

374 (hier habe ich die 1 nicht mehr von der 3 abgezogen, wir teilen trotzdem 2/2)
1 .
Nun die 7, wieder - 1, unter die 4 ein Punkt. 6 / 2 = 3, plus die 5 vom Punkt = 8

18 .

Nun die 4, letzte Ziffer. Wieviel abziehen? 0, du notierst die die 0 vor der vorherigen 0. Nun teilen, 4 / 2 = 2 plus den Punkt (5) = 7

187

Nun wieder von vorne. 1, muss -1 = 0, unter die 8 ein Punkt.

.

8 / 2 = 4, plus die 5 vom Punkt = 9

9

Letzte Ziffer, ich muss 1 abziehen, notiere die 1 (bisher hast Du notiert 100). 6 / 2 = 3

93

Nun sind wir 2stellig. Die 9, muss -1. Unter die 3 ein ., 8 / 2 =4

4 .

die 3, letzte Ziffer, muss -1. Wir notieren die 1 (1100). 2 / 2 = 1 plus die 5 vom .

46

Die 4 kann ich teilen = 2

2

die 6, letzte Ziffer, ich muss 0 abziehen. Wir notieren 0 (01100). 6 / 2 = 3

23

Die 2 / 2 = 1 (nichts abziehen)

1

Die 3, letzte Ziffer, muss 1 abziehen. Wir notieren die 1 (101100). 2 / 2 = 1

11

Die 1, ich muss 1 abziehen. Unter der anderen 1 den Punkt. 0 / 2 = 0

0 .

Die andere 1, letzte Ziffer, ich muss 1 abziehen, Notiere 1 (1101100). 0 / 2 = 0, plus die 5 vom Punkt = 5

5

5, letzte Ziffer, ich muss 1 abziehen, Notiere 1 (11101100). 4 / 2 = 2

2

2, letzte Ziffer, ich muss 0 abziehen, Notiere 0 (011101100). 2 / 2 = 1

1, letzte Ziffer, ich muss 1 abziehen, Notiere 1 (1011101100). 0 -> Fertig

748 ist also 1011101100

Anders erklärt. Jede Stelle der Binären Zahl hat von Rechts aus gesehen den doppelten Wert. Die rechte 0 hat den Wert 1, da sie aber 0 ist, ist sie "Wertlos".

Die 0 daneben hat den doppelten Wert, also 2, auch 0 -> "Wertlos".

Die 1 hat 4 als Wert, Wert:4

Die 1 hat 8 als Wert, Wert:8

Die 0 hat 16 als Wert, Wertlos

Die 1 hat 32 als Wert, Wert: 32

die 1 hat 64 als Wert, Wert: 64

die 1 hat 128 als Wert, Wert: 128

die 0 hat 256 als Wert, Wertlos

die 1 hat 512 als Wert, Wert: 512

Alle Werte addiert: 4 + 8 + 32 + 64 + 128 + 512 = 748

(Das war aber noch nicht meine Methode für Binär->Dezimal, die schreibe ich im nächsten Post)

woqjoiqwd2 
Fragesteller
 10.10.2021, 04:30

vielen DAnk

0
Bugfrei369  10.10.2021, 04:32

Binär -> Dezimal: Beispiel 1101011

Wir fangen links an, dort steht im Binären IMMER eine 1, führende Nullen (001101) kann man streichen (wie beim Dezimalen auch). Es steht nur bei der 0 keine 1, aber 0 Binär ist 0 Dezimal ;-)

Diese 1 schreiben wir hin.

Die nächste 1 bedeutet: Verdopple deine Zahl und addiere dann 1 hinzu.

1*2 = 2 + 1 = 3

Die 0 danach bedeutet: Verdopple deine Zahl (nix addieren!)

3 * 2 = 6

Die 1 bedeutet wieder: Verdoppelt, + 1

6 * 2 = 12 + 1 = 13

Die 0 wieder: nur verdoppeln

13

Stellenweise: rechts anfangen: 3 * 2 = 6; dann 1 * 2 = 2

26

Die 1 wieder : Verdoppeln, + 1

6 * 2 = 12, unter die 2 ein Punkt (deutet dann +1) und unter die 6 die 2

26
. 2

2 * 2 = 4, plus die 1 vom Punkt = 5

53

Die letzte 1 bedeutet: Verdoppeln, + 1

3 * 2 = 6 +1 = 7

53
7
5*2 = 10, schreibe unter die 5 eine 0 und links daneben ein .

53
. 07
Würden da noch Zahlen stehen, sag der . also wieder +1, Hier steht nix, also nur 1:

1101011 = 107

1
Bugfrei369  10.10.2021, 04:34

Habe die Methode bisher nur einer Person erklärt. Bisher konnte mich noch niemand diese Methode erklären (kein Lehrer, kein Kollege). Ich bin Fachinformatiker Anwendungsentwicklung, 48 Jahre alt. Die Tatsache das ich mit dieser Methode noch nicht Konfrontiert wurde bedeutet wohl, das sie neu sein muss (selbst entwickelt).
Mit dieser Ziffer für Ziffer Methode (auch beim Binär->Dezimal) können die Zahlen beliebig lang sein. Theoretisch 100 stellig oder mehr. Egal. Es braucht halt nur mehr Zeit zum berechnen, aber die Länge spielt keine Rolle!

1

Weil 0xxxxx Oktal ist. Also Basis 8.

Und Oktal 1337 ist Dezimal 735

0bxxxxx ist Binär und 10101010 ist Dezimal 170.

Ich habe, gerade für Binär -> Dezimal und Dezimal -> Binär vor einer Woche eine Nette Methode entwickelt bei der man für

Binär -> Dezimal nur +1 und *2 braucht
Dezimal -> Binär nur /2 (also die Hälfte), -1 und +5 braucht.

Jeweils von einer einstelligen Ziffer. Die Zahl selber kann beliebig lang sein:
168363487456348934684372438 in Binär -> kein Problem mit Stift und Papier
0x101001110110101010001001001110101010101 in Dezimal, auch kein Problem.

Bei Bedarf kann ich es gerne beschreiben.

woqjoiqwd2 
Fragesteller
 10.10.2021, 04:06

Danke dir, mir war nicht bewusst, dass mit einer 0 vorne direkt es als basis 8 gewertet wird, gut zu wissen :)

1
woqjoiqwd2 
Fragesteller
 10.10.2021, 04:08

ALso binär erkennt man, wenn da 0b davor ist und heximal wenn da 0x davor ist und oktal wenn da eine 0 davor ist

0

Hier noch ein paar Begriffe, die ihr vielleicht nie wieder hört (zumindest das mit N ;-) ).

2 Hex-Werte = 1 Byte (8 Bit)
1 Hex-Wert = 1 Nibble (1 halbes Byte, 4 Bit)
1 Okatal-Wert = 3 Bit (heute keine wirklich Verwendung mehr dafür)

Und für Herr der Ringe Fans:
8 Hobbit = 1 Hobbyte ;-)

Ja. Bei Literalen (als im Quellcode stehenden Zahlen).
Nun verwendet man Binär recht selten. Außer Du möchtest jedem Bit eine Funktion geben z.B.

Bit 1 (von rechts) = Leserechte
Bit 2 = Schreibrechte
Bit 3 = Löschrechte
Bit 4 = Menschenrechte
Bit 5 = Grundrechte
Bit 6 = Rechtsfahrverbot
Bit 7 = Rechts vor Links
Bit 8 = Ich habe Recht

Aber dafür nimmt man in der Regel Enumierungen, die dann Werte 1, 2, 4, 8 ... haben und logische Operatoren um diese dann zu prüfen:
Leserecht=1
Schreibrecht=2
Loeschrecht=4
usw.