Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Anfängerfrage: Bitweises UND?
Windoof - Do 03.03.05 11:41
Titel: Anfängerfrage: Bitweises UND?
Hallo Leute, ich bin ja C++'ler und habe eine Frage: Ich habe folgende Funktion in C++:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| String IntToBin(int zahl,int stellen=-1) { int i; String b; for(i=1;i<zahl;i*=2); for(;i>0;i/=2) b=String(char('0'+(zahl&i)))+b; for(i=b.Length();i<=stellen;++i) b='0'+b; i.~int(); return b; } |
Nun wollte ich mal fragen, wie dasin Delphi so geht? Soweit bin ich bereits:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| function IntToBin(zahl,stellen:Integer):String; var i:Integer; begin i:=1; while i<zahl do i:=i*2; while i>0 do begin Result:=(('0'+(zahl&i))as String)+Result; i:=i/2; end; for i:=Length(Result) to stellen do Result:='0'+Result; end; |
retnyg - Do 03.03.05 11:59
versuche es mal mit AND
und inttostr(i) (=itoa) statt "as string"
Windoof - Do 03.03.05 12:33
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| function IntToBin(zahl,stellen:Integer):String; var i:Integer; b:String; begin i:=1; while i<zahl do i:=i*2; while i>0 do begin b:=String(Char(Integer('0')+Integer(zahl and i)))+b; i:=Round(i/2); end; for i:=Length(b) to stellen-1 do b:='0'+b; Result:=b; end; |
Ist es nicht. Ziel derSacheist es einfach den Binärweet einer Dezimalzahl zu ermitteln, d.h. ich will mir eine Liste aller ASCII-Zeichen machen mit folgenden Spalten: Zeichen, Dezimal, Hexadezimal und Binär. and ist es nicht, ich denke eher an einem anderen schlüsselwort alá mod... nur nicht mod sondern halt
bitweises AND,
kein logisches AND. Wie heißt das BitweiseAND in Delphi?
Gausi - Do 03.03.05 12:39
Doch, AND ist das, was du suchst:
Delphi-Quelltext
1: 2:
| bool1 AND bool2 int1 AND int2 |
Windoof - Do 03.03.05 12:52
*omg* sorry leute... ich hab zwar ohne and gearbeitet, weil das bei mir wirklich nicht geklappt hat, aber ichhatte noch einen adneren fehler drin, hier die funktion, wie sie funktioniert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| function IntToBin(zahl,stellen:Integer):String; var i:Integer; b:String; begin i:=1; while i<zahl do i:=i*2; if i>zahl then i:=Round(i/2); while i>0 do begin inc(zahl,-i); b:=b+String(Char(Integer('0')+Integer(zahl>-1))); if zahl<0 then inc(zahl,i); i:=Round(i/2); end; while stellen>Length(b) do b:='0'+b; Result:=b; end; |
Spaceguide - Do 03.03.05 13:18
Oder so...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function IntToBin(zahl,ziffern : integer) : string; begin SetLength(Result,ziffern); while (ziffern>0) do begin Result[ziffern]:=IntToStr(zahl and 1)[1]; zahl := zahl shr 1; dec(ziffern); end; end; |
Delete - Do 03.03.05 14:48
fängste schon wieder mit kürzeren oder besseren Funktionen an, Spaceguide? :wink:
retnyg - Do 03.03.05 14:51
durchaus berechtigt, die funktion von windoof ist ja furchtbar (naja so denkt halt wohl ein c-coder)
delfiphan - Do 03.03.05 14:58
Die Funktion macht aber nicht dasselbe. Wenn du weniger Stellen angibst als benötigt, um die Zahl darzustellen, bekommst du Probleme.
Spaceguide - Do 03.03.05 17:25
Da bekomm ich keine Probleme, sondern die niederwertigen Bits.
delfiphan - Do 03.03.05 17:35
Aber Kompatibilitätsprobleme, wenn du seine Funktion durch deine ersetzst...
Spaceguide - Do 03.03.05 18:55
Also meine Funktion verhält sich eigentlich genauso wie die von Windoof.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!