Forum>Entwickler>Ist ~0 == -1 immer wahr?

Ist ~0 == -1 immer wahr?

andreas_g
andreas_g14.03.2115:03
Eine Frage an alle Experten hier:

Ist die Aussage ~0 == -1 auf allen Plattformen zutreffend (Programmiersprache C) oder gibt es Plattformen, die negative Zahlen anders definieren?

Falls es hier (exotische) Ausnahmen gibt: Wie könnte ich das zur "Compile-Time" verlässlich prüfen lassen?
0

Kommentare

Perdiste puesto primero17.04.2120:08
In C ist das auf allen Plattformen so, allerdings solltest Du sicherheitshalber auf signed casten.

Aber Achtung: andere Programmiersprachen sind teils deutlich restriktiver, da stimmt das nicht zwingend.
0
Marcel Bresink18.04.2110:10
andreas_g
Ist die Aussage ~0 == -1 auf allen Plattformen zutreffend

Nein, das gilt nur für Prozessoren, bei denen für vorzeichenbehaftete Ganzzahlarithmetik das Zweierkomplement-Verfahren verwendet wird.
andreas_g
Programmiersprache C

Die Normung der Programmiersprache C legt ausdrücklich fest, dass dieses Verhalten implementationsabhängig, also gerade nicht genormt ist. Das heißt zur Compile-Zeit ist es unmöglich, das in der Programmiersprache C normgerecht zu prüfen, falls man im Vorhinein nichts über den Prozessor weiß.
+2
andreas_g
andreas_g18.04.2112:37
Marcel Bresink
andreas_g
Programmiersprache C

Die Normung der Programmiersprache C legt ausdrücklich fest, dass dieses Verhalten implementationsabhängig, also gerade nicht genormt ist. Das heißt zur Compile-Zeit ist es unmöglich, das in der Programmiersprache C normgerecht zu prüfen, falls man im Vorhinein nichts über den Prozessor weiß.

Danke! Verstehe ich das also richtig, dass theoretisch auf dem Rechner, mit dem kompiliert wird, das Zweierkomplement-Verfahren angewendet werden könnte, während auf dem ausführenden Rechner ein anderes Verfahren zum Einsatz kommt und man das deshalb zur Laufzeit prüfen müsste?
+1

Kommentieren

Sie müssen sich einloggen, um sich an einer Diskussion beteiligen zu können.