
Zitat von
KLS:
Es ist ja nicht so das ich nicht schon eine lsg. dafür habe, nur ist die nicht gerade die beste *g*
hier mal ein bsp. wie die negativen zahlen aufgebaut sind. (shortint (-128 - 127))
bin =
dec
0000 0000 = 0
0000 0001 = 1
...
0111 1111 = 127
1111 1111 = -1
1111 1110 = -2
...
1000 0000 = -128
Das nennt sich 2er Kompliment
ich schrieb im obigen Beitrag
Anmerkung:
Kompliment ist das Negativ der Zahl: z.B. 00001001 -> 11110110
2er Kompliment ist das Kompliment der Zahl + 1 z.B. -> 00001001 -> 11110111
also
-1 = NOT(00000001)+1 = 11111111
-2 = NOT(00000010)+1 = 11111110
...
Dazu muß aber die Bitlänge bekannt sein. In Deinem Fall 8 Bit.
Was aber wenn Du eiene Variable bitlänge verwendest. z.B. ein paar Zahlen mit 12 Bits, dann ein paar mit 1.000 Bits, dann ein paar mit 100.000 Bits.
Um Dein Format zu verwenden müssten dann alle mit 100.000 Bit gespeichert werden.
z.B. -2 = -10 oder bei 8 Bit 11111110 oder bei 12 Bit 111111111110 oder bei 1.000 Bits 999 Einsen und eine Null.
Da macht es keinen Sinn.
Beim Hexadezimalsystem ist es doch das gleiche.
...
2 = 02
1 = 01
0 = 00
-1 = FF
-2 = FE
...
also
-0101 + 1110 = 1001
Es ist egal wie die Daten im Rechner abgelegt werden.
-05 + 0E = 09
Du schreibst ja auch nicht
FB + 0E = 09
Oder?
ps: der Rechner von MS Windows zeigt im wissenschaftlichen Modus bei negativen Zahlen das 2er Kompliment an, kann aber dann nicht wieder zurückwandeln:
-5 (
dec) = 11111111111111111111111111111111111111111111111111 11111111111011 (bin)
aber
11111111111111111111111111111111111111111111111111 11111111111011 (bin) = 18446744073709551611 (
dec)
Das ist doch nicht wirklich das was man will, oder?