[quote=docsnyder,03.04.2007, 11:24][...]
Die folgende Aussage:
QuoteThere are systems where bit 0 is the high order or sign bit, not the low order one.
findest Du hier:
http://www.thescripts.com/forum/thread216600.html
[...][/quote]
Diese Aussage ist zwar korrekt, hat aber nichts damit zu tun, ob AND funktioniert, oder nicht: Wenn alle Zahlen mit einem Vorzeichen im niederwertigsten Bit gespeichert werden, oder von mir aus in völlig durchgewürfelter Reihenfolge der Bits, so werden trotzdem *beide* Operanden des AND-Operators in diesem Format abgelegt. Es ist ja nicht so, dass eine beliebige Zahl intern in einem komischen Format abgespeichert wird, die 1 aber intern immer ein Wort mit gesetztem niedrigsten Bit währe. Die 1 ist genauso eine Zahl wie jede andere und liegt folglich im gleichen Format wie jede andere vor. Deswegen funktioniert die Überprüfung auf gerade oder ungerade mit AND immer -- sofern nicht aus irgendeinem Grunde die beiden Operanden *unterschiedliche* Speicherformate haben.
Das war es auch eigentlich, was ich mit meinem ersten Beitrag zu diesem Thema meinte. Ich hatte nur übersehen, neben der Speicherung in Fließkomma oder Netzwerkformaten die Speicherung negativer Zahlen als Beispiel für ein eventuell abweichendes Format anzuführen.
Ich denke wir können festhalten, dass die Methode
($x & 1 ? 'ungerade' : 'gerade') genau dann zuverlässig funktioniert, wenn eine der folgenden Aussagen zutrifft:
*
$x ist ein positiver Integer, der in ein Maschinenwort passt
*
$x ist ein negativer Integer, der in ein Maschinenwort passt, und auf der aktuellen Architektur werden negative Integer lediglich durch ein Signum-Bit gekennzeichnet
*
$x ist ein negativer Integer, der in ein Maschinenwort passt, und auf der aktuellen Architektur werden negative Integer als Zweierkomplement ihres Betrages dargestellt.
Mir fällt zwar keine Architektur ein, auf der nicht mindestens eine dieser Aussagen zutrifft, solange der Betrag von
$x klein genug ist, aber erstens könnte der Betrag von
$x durchaus auch größer werden und zweitens ist ja nicht gesagt, dass man überhaupt einen Integer im numerischen Teil des Skalares
$x vorliegen hat.
@DocSnyder: Ich glaube, wir meinen eigentlich das gleiche, reden aber irgendwie aneinander vorbei. Ich wollte nicht Deine Aussage an sich in Frage stellen, mir gefiel nur Deine Begründung nicht bzw. ich habe sie falsch verstanden. Falls ich mich bei meiner Antwort im Ton vergriffen habe, so tut mir das leid.\n\n
<!--EDIT|murphy|1175602066-->
When C++ is your hammer, every problem looks like your thumb.