Ankündigung

Einklappen
Keine Ankündigung bisher.

unsigned Bytes Problem

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • unsigned Bytes Problem

    Moin...

    ich hab da mal ein Problem, das nicht direkt mit einer Anwendung zu tun hat. ES geht um folgende Aussage die ich beim Googlen gefunden habe.

    mit 2 Bytes kann ich den Adressraum von -32768 bis +32768 abdecken

    32768 dec i= 80 00 Hex Richtig ?

    Wie konvertiere ich dann diese Zahl

    05 | 01 It is a two byte unsigned value

    Gewünscht in PHP , wo kann ich ggf. etwas zu dieser Problematik nachlesen was auch einigermaßen verständlich ist.

    Danke und Gruss, Peter


  • #2
    Im Manual unter Datentypen.
    Hexzahlen werden in php mit 0x Präfix dargestellt.

    Kommentar


    • #3
      Zitat von wetteronkel Beitrag anzeigen
      mit 2 Bytes kann ich den Adressraum von -32768 bis +32768 abdecken
      Nein, da du die 0 auch noch abdecken musst, geht der positive Zahlenraum nur bis 32767.

      32768 dec i= 80 00 Hex Richtig ?
      Jeder Taschenrechner kann Hex.
      Windows -> Start -> Run "calc" -> View -> Scientific
      Mac -> Applications -> Calculator -> View -> Programmer


      Wie konvertiere ich dann diese Zahl

      05 | 01 It is a two byte unsigned value

      Gewünscht in PHP
      Zum Beispiel mit
      PHP: hexdec - Manual


      wo kann ich ggf. etwas zu dieser Problematik nachlesen was auch einigermaßen verständlich ist.
      Google? Jede Informatikfakultaet der Welt behandelt Hexadezimal.

      Kommentar


      • #4
        unsigned Bytes

        Zitat von ElPresidente Beitrag anzeigen
        Nein, da du die 0 auch noch abdecken musst, geht der positive Zahlenraum nur bis 32767.
        Moin...
        Nun muss ich dazu sagen, das HEX Zahlen für mich kein Fremdwort ist, ich weiss sehr wohl das auch 0 abgedeckt werden muss.
        Aber deine Aussage ist so nicht ganz richtig.
        Der positive Zahlenraum bei 0xFFFF geht bis 65535.

        Was mich irritierte war die Aussage, das ich mit 0x???? einen Wert darstellen kann, der sowohl positiv als auch negativ ist.
        Und das irritierte dann doch ein wenig.

        ein Simples PHP Progrmmle ist da ganz hilfreich gewesen.

        PHP-Code:
        <?php
        for($i=-32768$i 32768$i++) {
           
        $hex =  dechex ($i) ;
        echo 
        "$i - $hex <br>";
        }
        ?>
        schaut man sich nun das Ergebnis an, sieht man sofort:

        -32767 = 0x8001 und 32767 - 0x7FFF

        Jetzt kommt man dann doch leicht in's Grübeln, denn eigentlich, und so hab ich es mir mal angeeignet, weil es so auch in der Literatur zu lesen war:

        0xFFFF = 65535
        das heißt, ich kann mit 0x0000 bis 0xFFFF einen Zahlenbereich von 0 bis 65535 überstreichen.

        Dadurch das ich mit Negativen Vorzeichen arbeiten möchte wird nun mit einem Trick gearbeitet:
        Alle Zahlen von 0 - 32767 werden "normal" dargestellt , also 0x0000 bis 0X7FFF.
        Alle Zahlen von -32768 bis -1 werden als 0x8000 bis 0xFFFF dargestellt.

        Und das wusste ich nicht.

        Die einfache Antwort wäre also gewesen:

        unsigned Bytes
        0 - 32767 = 0x0000 bis 0X7FFF
        -32768 bis -1 = 0x8000 bis 0xFFFF

        Achja, eine Randbemerkung sei erlaubt:
        Ich sehe es übrigens nicht als Selbstverständlich an, das mit 0xFFCF = -49 gemeint ist. Für mich ist 0xFFCF immer noch 65487.

        Danke für die Antworten.
        Gruss aus Kiel
        Peter

        Kommentar


        • #5
          Schau dir mal das an:
          Zweierkomplement – Wikipedia

          Damit erklärt sich die Darstellung, dann kannst du nämlich einfach dein Beispiel: 0xFFCF
          in binär umwandeln:

          1111 1111 1100 1111

          Dann schaust du dir das MSB an, siehst es ist 1, weist also negative Zahl, dann invertierst du:

          Aus:
          1111 1111 1100 1111
          wird damit:
          0000 0000 0011 0000

          // edit, hab das + 1 weil es eine negative zahl ist vergessen

          dann 1 addieren:


          0000 0000 0011 0001

          wandelst das wieder in eine Dezimalzahl um: 49
          und setzt wieder das - davor:

          -49

          Kommentar


          • #6
            Zitat von wetteronkel Beitrag anzeigen
            Aber deine Aussage ist so nicht ganz richtig.
            Warum, mein Posting bezog sich hierauf:
            mit 2 Bytes kann ich den Adressraum von -32768 bis +32768 abdecken
            Und da hast du nunmal eine positive Zahl zuviel stehen

            Der positive Zahlenraum bei 0xFFFF geht bis 65535.
            Bei unsigned ja.


            Was mich irritierte war die Aussage, das ich mit 0x????
            Das ist ja nur die Schreibweise, oder was meinst du?


            einen Wert darstellen kann, der sowohl positiv als auch negativ ist.
            Und das irritierte dann doch ein wenig.
            -0xFFFF gibts nunmal nicht

            Kommentar

            Lädt...
            X