Compilerfehler int64

Lschreyer
Schreiberling
Avatar
Gender: n/a
Posts: 527
Registered: 02 / 2007
Subject:

Compilerfehler int64

 · 
Posted: 13.01.2020 - 15:04  ·  #1
Ich habe seinen sehr seltsamen Fehler erhalten:

Folgender Code:
Code


type
  KeyTransType = record 
                   keyval: int64; 
                   row, col: byte; 
                 end; 


const
KeyTransform : array[0..37] of KeyTransType = ((keyval: 1; row: 0; col: 0), 
                                                 (keyval: 2; row: 0; col: 0), 
                                                 (keyval: 4; row: 0; col: 0), 
                                                 (keyval: 8; row: 0; col: 0), 
                                                 (keyval: 16; row: 0; col: 0), 
                                                 (keyval: 32; row: 0; col: 0), 
                                                 (keyval: 64; row: 0; col: 0), 
                                                 (keyval: 128; row: 0; col: 0), 
                                                 (keyval: 256; row: 0; col: 0), 
                                                 (keyval: 512; row: 0; col: 0), 
                                                 (keyval: 1024; row: 0; col: 0), 
                                                 (keyval: 2048; row: 0; col: 0), 
                                                 (keyval: 4096; row: 0; col: 0), 
                                                 (keyval: 8192; row: 0; col: 0), 
                                                 (keyval: 16384; row: 0; col: 0), 
                                                 (keyval: 32768; row: 0; col: 0), 
                                                 (keyval: 65536; row: 0; col: 0), 
                                                 (keyval: 131072; row: 0; col: 0), 
                                                 (keyval: 262144; row: 0; col: 0), 
                                                 (keyval: 524288; row: 0; col: 0), 
                                                 (keyval: 1048576; row: 0; col: 0), 
                                                 (keyval: 2097152; row: 0; col: 0), 
                                                 (keyval: 4194304; row: 0; col: 0), 
                                                 (keyval: 8388608; row: 0; col: 0), 
                                                 (keyval: 16777216; row: 0; col: 0), 
                                                 (keyval: 33554432; row: 0; col: 0), 
                                                 (keyval: 67108864; row: 0; col: 0), 
                                                 (keyval: 134217728; row: 0; col: 0), 
                                                 (keyval: 268435456; row: 0; col: 0), 
                                                 (keyval: 536870912; row: 0; col: 0), 
                                                 (keyval: 1073741824; row: 0; col: 0),
                                                 (keyval: 2147483648; row: 0; col: 0),  <-----hier Fehler!
                                                 (keyval: 4294967296; row: 0; col: 0),
                                                 (keyval: 8589934592; row: 0; col: 0),
                                                 (keyval: 17179869184; row: 0; col: 0),
                                                 (keyval: 34359738368; row: 0; col: 0), 
                                                 (keyval: 68719476736; row: 0; col: 0), 
                                                 (keyval: 137438953472; row: 0; col: 0)
                                                 ); 





Ich erhalte da ein "Type Mismatch! Int64 expected"

wenn ich die Zeile aus dem Array entferne uns die durch eine der späteren ersetze läuft es durch!
Die Zahl scheint also nicht zu groß zu sein, ist sie für int64 auch nicht, und auch größere werden akzeptiert.


Witzig ist, wenn ich die Zahl 2147483648 nur um 1 verringere läuft es durch.
Bei den Zahlen zwischen 2147483648 und 4294967295 gibt es den Fehler

2147483648 ist die zahl die sich ergibt wenn man nur Bit 31 in einem INT64 auf "1" setzt.
4294967295 ist die Zahl die sich ergibt wenn man die Bits 0..31 eines INT64 auf "1" setzt



Wie umgehe ich das?

Louis
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Compilerfehler int64

 · 
Posted: 13.01.2020 - 16:24  ·  #2
Schreibs mal binär rein: %0000000000000000000000000000000001000000000000000000000000000000;

..... ich hoff, daß ich mich nicht verzählt hab ;)

Kann man das nicht einfach
(2147483648, 0, 0),
schreiben?

Harry
Lschreyer
Schreiberling
Avatar
Gender: n/a
Posts: 527
Registered: 02 / 2007
Subject:

Re: Compilerfehler int64

 · 
Posted: 13.01.2020 - 16:53  ·  #3
Nein, da es ein Record ist muss man es so schreiben. Habe ich auch so heute gelernt :-)
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   65   79 · Page-Gen-Time: 0.034957s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI