Wunderbare C-Welt: Zahlenspielereien

TOP5: Diverses, Verschiedenes, ...

  • Homepage
  • Über mich
  • Fotos
  • Musik
  • Kontakt

Dec 10: Wunderbare C-Welt: Zahlenspielereien

Laut C ist abs(-2147483648) == -2147483648.

Eigentlich ist abs ja so definiert:

Für x<0: abs(x)=-x, für x>=0: abs(x)=x.

Aber da macht der 32bit-Zahlenraum nicht mit: Bei Zahlen mit Vorzeichen wird 1 Bit für das Vorzeichen benötigt, bleiben 31 Bit für die Zahl selbst. Mit 31 Bit lassen sich 2147483648 Werte darstellen. Also [0, 2147483647] im positiven Bereich. Da keine "-0" benötigt wird, wird in der (üblichen) 2er-Komplement Darstellung für die negativen Zahlen [-2147483648,-1] bereitgestellt (die interne Darstellung ist dabei auch so gewählt, dass sich gut damit rechnen lässt).

Und damit wird klar, warum -2147483648 ein Problem für die abs()-Funktion in C darstellt: es gibt kein -(-2147483648).

Posted by Patrick Georgi in Hacks Comments: (0) Trackbacks: (0)

Trackbacks
Trackback specific URI for this entry

No Trackbacks

Comments
Display comments as (Linear | Threaded)

No comments


Add Comment

E-Mail addresses will not be displayed and will only be used for E-Mail notifications.
Standard emoticons like :-) and ;-) are converted to images.
 
 

Statische Seiten

 

Layout by Andreas Viklund | Serendipity template by Carl