2017-07-11 1 views
0

J'ai un problème, regardez ce code:Lors de la lecture en boucle de clés d'objet, pourquoi la clé est-elle convertie en un nouveau nombre?

#SingleInstance, Force 
SetBatchLines, -1 
CoordMode, Pixel, screen 

FileDelete, Log.txt 

listObject := {} 
listObject[4280361510] := true 

for index1 in listObject 
{ 
    FileAppend, % "Item: " . index1 . "`n", Log.txt 
} 

qui imprime dans le fichier:

Item: -14605786 

Où j'attendre à imprimer:

Item: 4280361510 

Pourquoi la propriété affichée comme -14605786 lorsque l'index I attribué était 4280361510?

aussi:

if (listObject[4280361510]) { 
    FileAppend, % "But 4280361510 still works. `n", Log.txt 
} 

if (listObject[-14605786]) { 
    FileAppend, % "And -14605786 works too. `n", Log.txt 
} 

Imprime fichier:

But 4280361510 still works. 
And -14605786 works too. 

Pourquoi les propriétés agissent comme si elles sont affectées à l'objet?

+0

Je ne sais pas si c'est important, mais pour prendre en charge la bibliothèque gdip AHK, je suis en cours d'exécution sur la version 32 bits ANSI. –

Répondre

0

4280361510 et -14605786sont le même nombre - en arithmétique 32 bits. Les nombres de 32 bits signés s'enroulent et deviennent négatifs à environ 2 milliards (2). Ce nombre a presque été enveloppé une deuxième fois, auquel cas il redeviendrait positif.