Dos Anwendung 32 Bit Variablen und Shift Operator
-
Hallo,
Folgendes Problem- benutze eine Borland IDE unter Windows um mir eine 16Bit Anwendung für Dos zu erstellen. Soweit klappt das auch.
Für diverse Funktionen benötige ich 32 Bit Variablen zum übergeben
unsigned long Name=1<<14; //Ergebniss Name=0x00004000
unsigned long Name=1<<15; //Ergebniss Name=0xFFFE8000
eventuell auch Ergebniss 0xFFFF8000 - weis ich nicht mehr 100pround 1<<16 und grösser wird dann genauso falsch
Andere Operationen laufen dagegen mit den 32 bit Zahlen problemlos z.B.
unsigned long A=0xABAB0000;
unsigned long A=Bx0000CDCD;
unsigned long C=A+B; // C=ABABCDCD;Kann mir dafür jemand bitte einen Grund nennen warum das so ist ?
Ansonsten wäre ich für eine Literaturempfehlung bzw. Lösungsverschläge sehr dankbar - welches Dos Programmierung mit 32 Bit Werten betrifft.Thx Hpman
-
Dein Compiler rechnet standardmässig mit 16 Bit.
Wenn du schreibst 1<<15, dann sieht er 1 als einen 16 Bit Wert.
Dieser wird dann um 15 nach links geshiftet und dann erst in einen 32 Bit Wert umgewandelt und in der Variablen Name gespeichert.1<<15 = 1000000000000000 = 0x8000
Das ist eine negative Zahl, da das erste Bit 1 ist.
Bei der Umwandlung nach 32 Bit wird das Vorzeichen beibehalten. Daher ist das Ergebnis dann
11111111111111111000000000000000 = 0xFFFF8000Ändere den Code so ab:
unsigned long Name=(unsigned long)1<<14;
unsigned long Name=(insigned long)1<<15;
-
DrZoidberg schrieb:
Ändere den Code so ab:
unsigned long Name=(unsigned long)1<<14;
unsigned long Name=(insigned long)1<<15;oder sogar so:
unsigned long Name=1UL<<14;
unsigned long Name=1UL<<15;
-
Besten Dank an Euch beide- das funktioniert wunderbar.
Hpman