| |
|
|
| Mir fehlt, glaube ich, ein Bit (hoffentlich nicht nur durch eine lockere Schraube verursacht) => KompilierenMarkierenSeparierenDeclare LongInt1&,LongInt2&,BitCount%
Window 0,0-%MAXX,%MAXY
LET LongInt1&=+(2^31)-1
Print "LongInt-Wert von (2^31)-1=";LongInt1&
Let BitCount%=0
While Bitcount%<32
Print Bitcount%;"=";@Testbit(LongInt1&,Bitcount%)
inc Bitcount%
wend
LET LONGINT2&=0
Print ""
Print "Vor dem Setzen des Bits: ";LONGINT2&
LET LongInt2&=@Setbit(LongInt2&,31,1)
PRINT "Letztes Bit gesetzt: ";LongInt2&
Print "Bit 31=";@Testbit(LongInt2&,31)
LET LongInt2&=-(2^31)+1
Locate 0,40
Print "LongInt-Wert von -(2^31)+1=";LongInt2&
Let Bitcount%=0
While Bitcount%<32
Locate Bitcount%+2,40
Print Bitcount%;"=";@Testbit(LongInt2&,Bitcount%)
inc Bitcount%
wend
Waitinput
|
|
|
| |
|
|
|
Frank Abbing | Hi,
das letzte Bit eines LongInt ist immer das Vorzeichen-Bit. Ist es gesetzt, dann ist die Zahl negativ. Ist es nicht gesetzt, dann ist die Zahl positiv. Du kannst also durch Setzten dieses Bits eine Zahl negativieren oder an diesem Bit erkennen, ob eine Zahl negativ ist. |
|
|
| |
|
|
|
| Hallo Frank...
Das ist mir klar (darauf, daß das nicht huntertprozentig stimmt, pfeifen wir jetzt beide mal), doch wo ist Bit 31 denn hin??? Mit Testbit lässt es sich scheinbar nicht auslesen - oder habe ich es in geistiger Umnachtung nur verlegt?
Schau dir mal den Quelltext oben und die Werte an und lasse den Blödsinn außer acht, den ich in Rolands Forum gepostet habe. Da hatte ich vorher mit rein positiven ULARGE_INTEGER Strukturen gerechnet und der Quelltext basierte darauf. |
|
|
| |
|
|
|
| Ich versuche mal mein Problem noch etwas genauer zu beschreiben:
-2147483648=$80000000=%10000000000000000000000000000000 (GENERIC_READ z.B.) => Bit 31 gesetzt. Wenn ich versuche, Bit 31 mit TestBit auszulesen, gibt mir TestBit 0 zurück. Warum??? Selbes Problem wie bei |???? |
|
|
| |
|
|
|
| Hallo Profaner...
Das Bit geht in Profan verloren. Alles wichtige dazu hier: [...] |
|
|
| |
|
|