Anzeige:
Ergebnis 1 bis 11 von 11

Thema: wie schauen, ob in zahl das 2. bit gesetzt ist

  1. #1
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657

    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

  2. #2
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Zitat Zitat von msi
    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

  3. #3
    Registrierter Benutzer
    Registriert seit
    22.08.2002
    Ort
    Nürnberg
    Beiträge
    638
    oder über einen logischen Operator:
    PHP-Code:
    $erg = ($zahl 0x02) ? "gesetzt" "nicht gesetzt"
    Pingu

  4. #4
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657
    danke, hätt ich auch selber drauf kommen können
    wieso schreibst du 0x02 und nicht einfach 2?? was ist der unterschied?

    Markus

  5. #5
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657
    allgemein kann ichs dann so ausrechnen,
    wobei $st die stelle ist (im obrigen fall 2) und $zahl die zahl:

    PHP-Code:
    $zahl%(pow(2,$st))>($st-1))&&(pow(2,$st-1)<=$zahl 
    wie würde soetwas mit logischen operatoren aussehen?

    danke Markus

  6. #6
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Nutze doch einfach den Shift-operator
    PHP-Code:
    $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
    Geändert von Joghurt (22-12-2004 um 01:47 Uhr)

  7. #7
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657
    danke!

    wie mache ich dasselbe bei einem 3er system?
    also auwerten welchen wert (0,1 oder 2) das x. zeichen hat.

    Markus

  8. #8
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Da musst du mit pow und mod arbeiten.

    Wie im Zehnersystem. bei 1234 bekommst du die hunderter mit 1234/10^2 % 10

    Also:
    PHP-Code:
    $zahl pow($basis,$stelle) % $basis 
    oder auch (vielleicht etwas schneller, aber in Zeiten von Coprozzis unwichtig)
    PHP-Code:
    $digit $zahl;
    while (
    $stelle >0) {
      
    $digit $digit $basis
      $stelle 
    $stelle 1;
    }
    $digit $digit $basis 
    Geändert von Joghurt (22-12-2004 um 18:26 Uhr)

  9. #9
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    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!

  10. #10
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Zitat Zitat von BlueJay
    zahl%4==3
    (zahl & 3)==3

    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
    Code:
    zahl & 2 != 0 (oder == 2)
    oder zahl%4 >= 2
    heißen
    Geändert von Joghurt (23-12-2004 um 12:56 Uhr)

  11. #11
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Zitat Zitat von Joghurt

    Bei beiden Varianten testest du nur, ob die letzte Zifffer im Vierersystem eine 3 ist.
    Ups, Frage falsch gelesen!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •