signed & unsigned
-
hallo zusammen,
hat jemand eine Erkärung warum 1>>1 gleich 0 während -1>>1 gleich -1 ist.
wenn ich -1 um eine Stelle nach rechts verschiebe muß ich eine positive zahle bekommen, da das Vorzeichen bit 0 ist.
-
der leftshiftoperator ist so definiert, dass er bei signed typen mit vorzeichenbits auffüllt.
dh wenn deine Zahl kleiner 0 ist, schiebt er 1en am oberen Ende rein, wenn sie größer 0 ist 0en
-
myouness27 schrieb:
hat jemand eine Erkärung warum 1>>1 gleich 0 während -1>>1 gleich -1 ist.
wenn ich -1 um eine Stelle nach rechts verschiebe muß ich eine positive zahle bekommen, da das Vorzeichen bit 0 ist.das wird wahrscheinlich so gemacht, damit >>1 auch für negative zahlen wie 'geteilt durch 2' funktioniert. aber eigentlich ist im c-standard für negative zahlen nicht festgelegt, ob einsen oder nullen links reingeschoben werden sollen.
-
vlad_tepesch schrieb:
der leftshiftoperator ist so definiert, dass er bei signed typen mit vorzeichenbits auffüllt.
dh wenn deine Zahl kleiner 0 ist, schiebt er 1en am oberen Ende rein, wenn sie größer 0 ist 0enDas ist eben (leider) nicht so definiert. Das ist das gute alte "implementation defined".
edit: oh, wurde ja schon gesagt.
-
Nochmal etwas konkreter. Wie schon gesagt, das Shiften von signed ngativen Werten ist im Standard nicht definiert. Compiler implementieren dies idR als arithmetische Shifts. Daher das oben erwähnte Verhalten.
-
groovemaster schrieb:
Nochmal etwas konkreter. Wie schon gesagt, das Shiften von signed ngativen Werten ist im Standard nicht definiert.
Und falls es noch keiner gesagt hat: Laut Standard ist das Shiften von negativen Werten nicht definiert.
-
sh1ftÖr schrieb:
groovemaster schrieb:
Nochmal etwas konkreter. Wie schon gesagt, das Shiften von signed ngativen Werten ist im Standard nicht definiert.
Und falls es noch keiner gesagt hat: Laut Standard ist das Shiften von negativen Werten nicht definiert.
.. Seid ihr alle so vergesslich? Das Shiften ist laut Standard _nicht_ definiert, wenn es sich um negative Werte handelt**!!!!!**
-
myouness27 schrieb:
hat jemand eine Erkärung warum 1>>1 gleich 0 während -1>>1 gleich -1 ist.
ja, ich. weil das shiften von negativen werten laut standard nicht definiert ist.
-
groovemaster schrieb:
Compiler implementieren dies idR als arithmetische Shifts.
Müssen sie nicht. Das Rechtsshiften von negativen Werten ist nicht definiert.
-
Das Rechtsshiften von negativen Werten ist nicht definiert.
...funktioniert aber meistens trotzdem ganz gut.
-
Ihr hab doch keine ahnung, es liegt daran,dass das shiften von negativen werten laut standard nicht definiert ist.
-
groovemaster schrieb:
Wie schon gesagt, das Shiften von signed ngativen Werten ist im Standard nicht definiert.
ach? hat das schon wer gesagt?
-
PamAlt schrieb:
Ihr hab doch keine ahnung, es liegt daran,dass das shiften von negativen werten laut standard nicht definiert ist.
Ach, wirklich? Und um es "rund" zu machen: Wurde schonmal erwähnt, daß es bei negativen signed nur Sinn macht, "bitseitig oben" Einsen nachzustopfen
-
Meine Güte, sind die Unregs heute alle wieder witzig.
-
groovemaster schrieb:
Meine Güte, sind die Unregs heute alle wieder witzig.
nicht nur die unregs. wer war das doch gleich mit der zweiten wiederholung?
-
Welche Wiederholung?
-
groovemaster schrieb:
Welche Wiederholung?
der fünfte beitrag dieses threads. ich wette, der kleine satz: 'Nochmal etwas konkreter' hat diese reaktionen der unregs heraufbeschworen.
-
Die relevante Aussage war der vorletzte Satz. Und darauf bezog sich auch das "konkreter". Das war jedenfalls keine Wiederholung. In Zukunft also bitte etwas sorgfältiger lesen und nicht nur den Thread zuspammen.
-
groovemaster schrieb:
In Zukunft also bitte etwas sorgfältiger lesen und nicht nur den Thread zuspammen.
du hast die zwei wörtchen 'ich sollte' davor vergesen.
-
Falls dir das nicht bekannt sein sollte, Ignoranz ist keine Tugend. Also bitte unterlasse dieses Kindergarten Getue in Zukunft. Einsicht soll ja bekanntlich der erste Weg zur Besserung sein.