Binär???
-
btw. Deine Funktion hat nen hässlichen Fehler: Der Nullabschluss fehlt... (o;
-junix
-
junix schrieb:
volkard schrieb:
statt >>= verwende ich leiber /=, denn der optimierende compiler kann /= zu >>= selber machen.
Nur, dass >>= mehr dokumentiert als ein /= ... kommt aufs Selbe wie wenn einer statt ein <<= 3 zu machen einfach nen 2 * 2 * 2 macht (und nicht mal 8 rechnet, damit er selbst dokumentiert hat wieviele bits er schiebt)... liest sich wie sau und auf den ersten Blick ist nicht ersichtlich was er da eigentlich will. (wahrscheinlich gewöhnungssache)
du spielst mit bits und ich mit zahlen.
aus der version für binärzahlenstring dez2bin(int x) {//ungetestet char buf[32]; char* p=buf+32; do *--p='0'+x%2; while(x/=2); return string(p,buf+32-p); }
wird leicht eine für zahlen oktalsystem
string dez2bin(int x) {//ungetestet char buf[32]; char* p=buf+32; do *--p='0'+x%8; while(x/=8); return string(p,buf+32-p); }
indem ich an zwei stellen statt 2 jetzt 8 schreibe. hab also eigentlich den beliebigen zahlenumwandler gebaut (auch deshalb + statt ?:) und der klappt halt auch für 2 und ist schnell.
-
junix schrieb:
btw. Deine Funktion hat nen hässlichen Fehler: Der Nullabschluss fehlt... (o;
-junixab doch den stringkonstruktoe mit start und länge genommen. um noch nen sinnlosen aufruf von strlen zu vermeiden und dem string zu erlauben, sofort speicher in richtiger länge zu allokieren.
-
volkard schrieb:
indem ich an zwei stellen statt 2 jetzt 8 schreibe. hab also eigentlich den beliebigen zahlenumwandler gebaut (auch deshalb + statt ?:) und der klappt halt auch für 2 und ist schnell.
Wusst' ich doch, dass da was dahinter steckt (o: Wieso muss man dich immer rausfordern bis du mit sowas hinter Ofen vor kommst (o;
-junix
-
junix schrieb:
volkard schrieb:
und die vielen += auf strings sind gar nicht so klasse.
Dank dem Vorreservieren wirds nicht halbso teuer wie wenndu das bei nicht vorreserviertem Speicher machst...
du braucht trotzdem pro += einen test, ob das neue zeichen noch inm den string paßt oder ob er wachsen muß. hab ich mir gespart.
junix schrieb:
Im Gegenteil. Es kann sogar massiv schneller sein, den Bedarf an Bytes zunächst zu errechnen und dann gezielt zu reservierst, als immer mal wieder auf die allocator des Containers zu warten. (Solange du dich nicht innerhalb eines Blocks bewegt welcher der Allocator sowieso reserviert). Zugegeben, ist nicht unbedingt schneller als dein Byte-Array
nennen wirs mal ganz neutral, und ohne werten zu wollen, "lahmer"?
-
@DrGreenthumb Genau das was Konstantin sagte meinte ich
@Bitschieberei&Pow Schirbe gerne bits, habt ihr n sinnvolles tut darüber? hab davon nämlich noch nix in meinen schlauen büchern gefunden ^^
-
#include <bitset> #include <string> std::string int_to_bin(unsigned int i) { return std::bitset<8>(i).to_string(); }
Man kann auch ruhig das benutzen, was im Standard schon vorhanden ist.
ps.: Das bitset ist hier auf 8 bit beschränkt - könnten genau so gut auch mehr sein...
-
Hatten wir das Thema nicht vor ner Woche schon mal umgekehrt?
-
In dem Fall ist es sogar noch viel sinnvoller, die Zahl einfach so zu benutzen, in etwa:
enum flags { ist_dumm = 1, ist_praesident = 2, heisst_bush = 4 } //... void do_something(flags f) { if(f & ist_dumm) { std::cout << "Was für ein Idiot!" << std::endl; } } //... flags dubya_flags = ist_dumm | ist_praesident | heisst_bush; do_something(dubya_flags);
-
Oh, verdammt. Entschuldigt das, ich hatte nur die erste Seite gesehen, und da hätte das Sinn gemacht...
-
Lol...ich frag mich vor allem, wie man auf so einen alten Thread stößt.
-
CarstenJ schrieb:
Lol...ich frag mich vor allem, wie man auf so einen alten Thread stößt.
-
Heh. Ich bin halt Archäologe
Nein, eigentlich hab ich nach einem neueren Thread gesucht, dessen Titel ich vergessen hatte und der von einem ähnlichen Thema handelte.
-