Archiv verlassen und diese Seite im Standarddesign anzeigen : wie schauen, ob in zahl das 2. bit gesetzt ist
Hallo,
wie kann ich in einer großen zahl schauen, ob das 2. bit (also der 2er im dualsystem) gesetzt ist?
Das ganze soll natürlich möglichst performant ablaufen, bisher konvertiere ich die zahl in einen string, der die zahl im dualsystem umgekehrt (also letztes zeichen wird erstes usw.) darstellt und überprüfe dann ob das 2. zeichen auf 1 ist (also mit $string[1] == 1).
Markus
wie kann ich in einer großen zahl schauen, ob das 2. bit (also der 2er im dualsystem) gesetzt ist?
äh, zahl%4>1?
so long
oder über einen logischen Operator:
$erg = ($zahl & 0x02) ? "gesetzt" : "nicht gesetzt";
Pingu
danke, hätt ich auch selber drauf kommen können ;)
wieso schreibst du 0x02 und nicht einfach 2?? was ist der unterschied?
Markus
allgemein kann ichs dann so ausrechnen,
wobei $st die stelle ist (im obrigen fall 2) und $zahl die zahl:
$zahl%(pow(2,$st))>($st-1))&&(pow(2,$st-1)<=$zahl
wie würde soetwas mit logischen operatoren aussehen?
danke Markus
Nutze doch einfach den Shift-operator
$zahl & (1<<$st)
$st beginnt bei 0.
BTW: 0x bedeutet, dass die Zahl im Hexadezimalsystem angegeben wird. Das hat den Vorteil, dass jede Ziffer für genau 4 bit steht. Um also z.B. bit 4 (bei 0 angefangen zu zählen) zu prüfen, musst du entweder
$zahl & 16 schreiben, oder $zahl & 0x10, was einfacher ist. Bit 31 wäre z.B. $zahl & 0x80000000 oder $zahl & 2147483648. Ich denke, du siehst den Zweck ;)
danke!
wie mache ich dasselbe bei einem 3er system?
also auwerten welchen wert (0,1 oder 2) das x. zeichen hat.
Markus
Da musst du mit pow und mod arbeiten.
Wie im Zehnersystem. bei 1234 bekommst du die hunderter mit 1234/10^2 % 10
Also:
$zahl / pow($basis,$stelle) % $basisoder auch (vielleicht etwas schneller, aber in Zeiten von Coprozzis unwichtig)
$digit = $zahl;
while ($stelle >0) {
$digit = $digit / $basis
$stelle = $stelle - 1;
}
$digit = $digit % $basis
mathematisch, aber mal ganz ohne power und in 1 Rutsch :)
zahl%4==3
nu fehlt nur noch Pingus Bitmask-Variante , auch in 1 Rutsch:
(zahl & 3)==3
so long und
Frohes Fest!
zahl%4==3
(zahl & 3)==3:confused:
Bei beiden Varianten testest du nur, ob die letzte Zifffer im Vierersystem eine 3 ist. Nicht mehr und nicht weniger. Der Zusammenhang zu dem eigentlichen Problem ist mir jetzt nicht ganz klar...
PS: Falls du dich auf die ursprüngliche Frage beziehen solltest (2. bit testen), müsste es
zahl & 2 != 0 (oder == 2)
oder zahl%4 >= 2heißen
:confused:
Bei beiden Varianten testest du nur, ob die letzte Zifffer im Vierersystem eine 3 ist.
Ups, Frage falsch gelesen!
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.