Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Rechnen mit Binär zahlen


Sqall - Do 27.01.05 18:03
Titel: Rechnen mit Binär zahlen
Also, ich muss ein verschlüsselungsprogramm schreiben. Das problem ist das die verschlüsselung (DES) mit Binärzahlen rechnet. Ich hab mir die Delphi hilfe noch nciht ganz angeguckt, hab im moment lieber weitere informationen für das verfahren und den algorithmus rausgesucht. Deshalb frage ich, kann ich mit delphi in binärzahlen rechnen? Wenn ja wie? Ansonsten müsste ich das mit nem array aus boolean oder so anstellen. Aber ich weiß nicht ob delphi mir das schon alles mitbringt. bevor ich das rat neu erfinde ^^ :D . Und wenn ich in binär zahlen rechnen kann, kann ich dann befehle wie AND,OR oder XOR benutzen?

mfg

Sqall


sourcehunter - Do 27.01.05 19:17

Ja, warum nicht?

a and b
a xor b
a or b

auch in beliebiger Kombination:

(a and b) or c ...

P.S.: Du würdest nur das RAD neu erfinden. :wink:


GB - Do 27.01.05 20:42

Vielleicht hilft dir dieser [http://www.dsdt.info/tipps/?id=437] Link weiter?
Hier werden Zahlen in andere Systeme umgerechnet. Du könntest also z.B alle Rechenoperationen im 10er System durchführen und dann umwandeln.

GB


Gausi - Fr 28.01.05 13:06

Ich hab da mal eine Veständnisfrage, die evtl. zur Lösung beiträgt. Wo ist der Unterschied, ob ich binär oder dezimal rechne?

Quelltext
1:
2:
01+01 bin = 10 bin
 1+ 1 dez =  2 dez

Rechnerintern wird sowieso binär gerechnet. Die Frage, ob Delphi mit Binärzahlen rechnen kann, sollte also eher heissen, ob es mit Dezimalzahlen rechnen kann.

Oder hab ich das Problem in seiner Komplexität noch nicht ganz erfasst?


Sqall - Fr 28.01.05 16:35

Wenn du so fragst kann ich dir direkt beantworten das delphi nur mit binär zahlen rechnet da ein PC nur mit binär zahlen rechnet. Die frage war eher ob es nen typ gibt mit Binärzahlen wo ich dann einfach (wie z.B. integer) die Zahl 1000101 habe. Es geht nicht darum ob delphi damit rechnet. Ich könnte dir jetzt auch noch erklären wie ein PC komplexe rechensachen wie e-funktionen oder wurzeln usw rechnet. Aber das gehört nicht zum thema.

mfg

Sqall


Gausi - Fr 28.01.05 18:43

Also gehts dir darum, die ausgerechneten Zahlen in der Binärdarstellung auszugeben, und evtl. Eingaben auch in der Binärdarstellung durchzuführen?

Integer in einen 0-1-String umwandeln geht z.B. so

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
for i:=0 to 31 do  
//integer hat 32 Bits, Word 16, Byte 8
//Wie das mit dem Vorzeichen-Bit ist, weiss ich jetzt nicht...
  if ((int shr i) AND 1)=1
      then str:='1'+str
      else str:='0'+str;


Sqall - Di 01.02.05 21:38

Ich meine das so. Ich hab ne zahl aus binär zahlen wie zum beispiel eine 8bit lange (was wahrscheinlich ist den es geht um die verschlüsselung DES) und will die sagen wir mal mit einer anderen addieren oder ähnliches. ob es in delphi einen typen gibt für reine binär zahlen? Hab nichts gefunden. Müsste sachen wie xor ((a +b) mod 2 ^^ ) benutzen. mit boolean array zu rechnen ist nicht gerade gut da ich keine länge in den array[0] packen kann. Bin am überlegen ob ich records nehme die in dem array sind. Aber ist auch nciht so ne tolle lösung. wie gesagt. Wenn es ein type geben würde mit dem ich eh schon binär werte hab und mit denen auch direkt rechnen kann wäre das für mich ein viel faches einfacher.

mfg

Sqall


sourcehunter - Do 03.02.05 11:41

Ich versteh dein Problem nicht. Jeder Integer ist eine Binärzahl. Du kannst zum Beispiel mit a and $1>0 überprüfen, ob das niedrigste Bit gesetzt ist. Du kannst genauso $8 or $1=$9 berechnen. Du musst dich nur damit abfinden, dass du mit Zahlen im Hexdezmalsystem oder im Dezimalsystem im Programm arbeitest, aber für den Computer sind das alles Binärzahlen.


Sqall - Do 03.02.05 12:39

Ich versteh euch nicht. Ein Integer ist doch bis zu einer Zahl zu 2^(32-1).

Das bedeutet für mich das wenn ich die Zahl (ich will sie aber als Binär ansehen) 101 habe und dann + 110 nehme krieg ich mit dem typ integer 211 raus. Aber 101 binär ist im zehnersystem 5 und nicht 101. Das sit mein problem Wenn ich 101 + 110 rechnene will uch 1011 raus bekommen. Deshalb verstehe ich euch nicht.


jasocul - Do 03.02.05 12:56

Ärgert Squall doch nicht so.
Ein Computer arbeitet (zur Zeit) immer binär. Der kennt intern nur 1 und 0.
Was der dummer Programmierer dann eintippt wird immer binär verarbeitet.

Leider kennt Delphi imho den Zahlentyp binary nicht.
Wenn dun jetzt eine Kombinationen von 1-en und 0-en, wird Delphi es also auch nicht als Binär-Zahl erkennen. Vermutlich wird daraus ein Integer. Deswegen wird dir jeder Versuch damit zu Rechnen, nicht das Ergebnis liefern, das möchtest.
Du bist wohl gezwungen, eine entsprechende Zahlenkombination umzubauen, dann "normal" damit zu rechnen, und das ganz zurückwandeln.
Oder du bastelst dir das ganze in Assembler.


sourcehunter - Fr 04.02.05 11:38

Du musst dass, was du binär addieren willst oder so erstmal ins Dezimal- oder Hexadezimalsystem umwandeln. Empfelenswert ist es die Zahlen ins Hexadezimalsystem umzuwandeln, weil das übersichtlicher ist.

binär = hexadezimal
1 = 1
10 = 2
100 = 4
1000 = 8
1001 = 9
1010 = A
1011 = B
1100 = C
1101 = D
1110 = E
1111 = F
10000 = 10
100000 = 20
1000000 = 40
10000000 = 80
11110000 = F0

Ich hoffe du hast das System verstanden.


Sqall - Fr 04.02.05 12:50

Wenigstens verstehen mich jetzt endlich mal welche. Ja das Hexadezimalsystem ist mir bekannt und wie man damit rechnet auch. Schade, hätte mir die arbeit um einiges einfacher gemacht wenn es den typ binary oder so gegeben hätte. Dann werde ich mal sehen wie ich das mache. Vielleicht mit nem Array aus bollean? Wer weiß, das überlasse ich meinem hoffentlich kreativen geist. Hab ja ungefähr noch nen monat um das programm fertig zu haben. Nächste woche fang ich mit dem proggi an. Thx leute

mfg

Sqall


0pf4 - Sa 26.02.05 03:12

hi,

kommt vlt etwas spät, aber ich versuchs trotzdem mal ...

du musst die zahlen nicht in binärzahlen umformen ... delphi kann die logischen operationen auch auf integer anwenden .. frag mal deine delphi-hilfe zum thema "Logical (bitwise) operators" ( ich habs bei delphi 6 getestet .. )