| |
|
|
- Seite 1 - |
|
| Imho wird dieser Quelltext:
nicht korrekt abgearbeitet:
Hierbei setze ich x& auf den Wert $FFFFFFFE und frage danach x& ab ob es den selben Wert $FFFFFFFE besitzt. Wird aber "nein" ermittelt.
Oder übersehe ich dabei etwas?
So gehts:
So nicht: und so gehts auch:
|
|
|
| |
|
|
| |
|
- Seite 2 - |
|
|
RGH | $FFFFFFE ist von sich aus nun mal ein positiver Wert. Auch Hexwerte können mit einem Vorzeichen versehen werden, -2 wäre in Hex nun mal -$2.
Trotzdem kann der Wert einem Longint ohne Overflow-Meldung zugewiesen werden. Sogar noch größere Werte. (Das war gewiß eine bewußte Entscheidung, da auch eine Fehlermeldung möglich gewesen wäre.)
Dann werden einfach die niedrigsten 4 Byte (=32 Bit) des Wertes. Da aber bei einem Signed-Longint (wie auch bei einem Signed-Quad) das höchste Bit für das Vorzeichen steht, geht der Wertebereich eben nur bis $7FFFFFFF. Werte ab $80000000 werden dann als negativ interpretiert (Überlauf).
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 10.02.2011 ▲ |
|
|
|
|
| Das ist mir so ja schon klar.
a& als signedLong hat den Wertebereich von -2147483648 bis +2147483647 -
wenn a& also den Wert -2 trägt, dann stehen die Bytes auf FE FF FF FF genauso wie die Bytes bei $FFFFFFFE auf FE FF FF FF stehen.
Ich habe ja gleich verstanden, dass das XProfan in diesem Fall das $FFFFFFFE eben anders "interpretiert" und das es dafür eine Erklärung (Vorzeichen) gibt.
Ich finde jedoch irgendwie auch nicht richtig, dass ein 32-Bit-Long mit Wert -2 nicht mit der Bytefolge $FFFFFFFE übereinstimmen soll aber kann es natürlich akzeptieren da durch das $/Hex-Zeichen nunmal dann in XProfan nicht 1:1 die Bytes gemeint sein müssen sondern eben eine "Interpretation". |
|
|
| |
|
|
|
| |
|
| |
|
|
|
| Frabbing (10.02.11)
Vor-zei-chen-bit...
Ah, Du meinst Vor-zei-chen-bit, nicht etwa Vorzei-chenbit oder gar V-orzeiche-nbit bzw. vo-rze-ich-enb-it - nein, es ist das Vor-zei-chen-bit.
Das fehlt doch aber nicht bei $FFFFFFFE - also ist doch klar bei dem Bit das es sich ums Vorzeichenbit handelt wenn mit 32-Bit-Long verglichen wird.
Irgendwie bin ich wohl zu stumpf... ^^ |
|
|
| |
|
|
|
| Wo befindet sich denn das Vorzeichenbit? |
|
|
| |
|
|
|
RGH | Das Vorzeichenbit ist das höchstwertige Bit, also jenes, das bei $80000000 gesetzt wird, wenn es sich um ein vorzeichenloses Longint handelt.
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 10.02.2011 ▲ |
|
|
|
|
| Alter Spielverderber. |
|
|
| |
|
|
|
| @Frank: Vor-zei-chen-bit... |
|
|
| |
|
|
|
| Frabbing (10.02.11)
Genau, dann schreib mal -2 als 32 und als 64 bit-Zahl binär untereinander und du solltest deinen Irrtum erkennen...
Schreib mal $FFFFFFFE und -2 jeweils 32-Bittig untereinander und die Macht von Grayskull ist mitdir... |
|
|
| |
|
|
|
|
Schreib mal $FFFFFFFE und -2 jeweils 32-Bittig untereinander
Ist ja keine Herausforderung. Da ist das Rätsel der ganzen verschwundenen Postings heute schon rätselhafter... |
|
|
| |
|
|
|
RGH | Folgendes Programm zeigt (ab der nächsten Lieferung der Subscriptionsversion)* die Zusammenhänge:
* aktuell gibt es noch ein paar Probleme mit QuadInts, wenn sie als Parameter an Prozeduren übergeben werden und außerdem brauchte Delphi noch etwas Nachhilfe, damit die binären Operatoren auch mit Int64 (=Quad) funktionieren, was dazu führte dass |, &, <<, >>, TestBit() und SetBit() nur bis 32 Bit korrekt funktionierten.
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 11.02.2011 ▲ |
|
|
|
|
| Aufgabe: "Setzen Sie auf möglichst coole Art und Weise mit XProfan das 2. Bit des Wertes einer 32-Bit-Long-Variable!"
Lösung:
|
|
|
| |
|
|