-110 entspricht der binären Zahl 111111112 im Zweierkomplement (ansonsten wäre es 28 - 1 also 255). Zählt man zu 111111112 1 dazu, erhält man 1000000002. Da der Einser ganz vorne die 9. Stelle wäre, die in 8bit nicht mehr dargestellt werden kann, so fliegt sie raus und wir bekommen 000000002, also 0.
Das folgende Bespiel zeigt die Verwendung eines C-Datentypen für ein Byte, wo tatsächlich immer nur 8bit verwendet werden. Allerdings kann man nicht unmittelbar mit den Werten rechnen, da diese Werte sonst einfach in den entsprechenden Python-Typ int umgewandelt werden würde und es nicht zu einem Überlauf käme.
import ctypes # see help(ctypes)
def inc(var):
"""increment var by one"""
return type(var)(var.value + 1)
def dec(var):
"""decrement var by one"""
return type(var)(var.value - 1)
if __name__ == '__main__':
var = ctypes.c_byte(126) # var = 126 - one byte
var = inc(var) # var = 127
print(var.value)
var = inc(var) # var = -128 (10000000 binary)
print(var.value)
var = ctypes.c_byte(-1) # var = -1 - one byte (11111111 binary)
var = inc(var) # var = 0
print(var.value)
Im folgenden Video wird das auch ganz schön erklärt:
Keine Kommentare:
Kommentar veröffentlichen