Ne pas oublier comment negative numbers are expressed in binary, et que VB6 et VB.NET interprètent différemment des nombres comme & h8300.
Parce que & hEDB80000 ne correspond pas à 16 bits, VB l'interprète comme long (32 bits). Parce que le bit haut est défini, VB6 sait que c'est négatif.
Nous allons annuler la two's complement (dans un monde 32 bits) pour déterminer la valeur décimale
(~&hEDB80000 + 1) = &h1247FFFF + 1 = &h12480000 = 306708480
depuis le bit de signe a été défini, c'est -306708480
Parce que & h8300 tient dans 16 bits, VB l'interprète comme entier (16 bits). Parce que le bit haut est défini, VB6 sait que c'est négatif.
Nous allons détachez les deux complément de (dans un monde 16 bits)
(~&h8300 + 1) = &h7DFF + 1 = &h7D00 = 32000
depuis le bit de signe a été défini, c'est -32000. Lorsque l'addition se produit, les deux valeurs sont considérées comme longues (32 bits).
(-306708480) + (-32000) = -306740480
Mettons que revenir en deux dans l'hexagone du complément
~(306740480 - 1) = ~(&h12487D00 - 1) = ~(&h12487CFF) = &hEDB78300
Alors & hEDB78300 est la bonne réponse.
Notes:
Personnellement, je chose que la confusion se produit à cause des éléments suivants:
&h0004000 is interpreted as 16384 // Fits in 16-bits, sign bit is not set
&h0008000 is interpreted as -32768 // Fits in 16-bits, sign bit is set
&h0010000 is interpreted as 65536 // Requires 32-bits, sign bit is not set
comme mentionné dans l'autre poste, vous pouvez contourner ce problème en marquant explicitement les valeurs que désire ardemment
&h0004000& is interpreted as 16384
&h0008000& is interpreted as 32768
&h0010000& is interpreted as 65536
Pouvez-vous élaborer là-dessus? Je ne vois pas comment le résultat de quelque chose de négatif plus un petit nombre positif finirait avec le même petit nombre. (Basculer en base10 ... -1000 + 97 = 903, pas quelque chose se terminant par 97.) Sa sortie se termine par "8300", qui est le nombre qu'il a ajouté. – JMD
J'ai fait le calcul dans un calcul hexadécimal et j'obtiens son résultat attendu. Je ne dois pas voir la forêt pour les arbres. – JMD
@JMD: VB6 fait les choses un peu bizarre, et interprète 0x8300 comme un nombre négatif, donc il sort étrange –