¿Por què da desbordamiento este codigo?

Iniciado por theghost_te, 22 Noviembre 2010, 00:36 AM

0 Miembros y 1 Visitante están viendo este tema.

theghost_te

Hola amigos estaba haciendo un codigo bastante extenso en VB6 y al ejecutar fallò en un bucle FOR que daba desbordamiento, luego lo ejecute paso a paso con F8 y el desbordamiento se producia al restar 2 variables de tipo BYTE aa = 2 y bb = 58, y guardarlas en una de tipo INTEGER llamada r. asi que ejecute por separado la parte que me daba errores:



Private Sub Form_Load()
   Dim aa As Integer, bb As Byte, r As Integer
   aa = 2
   bb = 58
   r = aa - bb
   'r = -2000
End Sub


si ejecutan ese code veran que les da desbordamiento.
La verda no sè por què me da errores, el resultado seria -56 que se guarda en r que es un INTEGER y deberia soportar el valor.
¿en què fallé?

Dessa

Adrian Desanti

theghost_te

No , lo que pasa es que me equivoque al escribir

theghost_te

#3
Aqui esta la captura de pantalla
http://www.uploadfilesystem.com//viewimage.php?file=/imagenes/10/11/22/csT84224.jpg

Dessa

No se ve bien la captura pero parece que aa es byte en dicha imagen

PD: si editas despues que alguien te responde se desordena el hilo

Adrian Desanti

theghost_te

#5
volvi a subir la imagen en otro server pincha en el enlace otra vez
Ah y prueba el code, deberas me da desboramiento

Psyke1

Byte solo va desde 0 hasta 255, 2 - 58 da un número negativo y eso no es compatible con el tipo de variable Byte, igualas r a el resultado de (aa - bb) siendo este incorrecto y una igualación, los dos lados deben ser coherentes.
La solucion es cambiar de tipo de variable y ya está... ;)

DoEvents! :P

Dessa

Como te dice Mr Frog o cambias el tipo de variable o lo combiertes, depende el caso

Option Explicit

Private Sub Form_Load()
    Dim aa As Byte, bb As Byte, r As Integer
    aa = 2
    bb = 58
    r = CInt(aa) - CInt(bb)
    MsgBox r
End Sub



Adrian Desanti

theghost_te

Ok man , pero por que sucede esto? como ves el codigo esta bien r (INTEGER) deberia soportar el -56 resultante de aa-bb, esto solo se da en VB6? o tambien en el resto de lenguajes? .solo una explicaciòn para entenderlo. :laugh:

Dessa

#9
Porque el lenguaje antes de otogar a r (integer) hace la cunta en byte (2 - 58) es overflow

Fijate que así no da error (no es overflow)



Option Explicit

Private Sub Form_Load()
   Dim aa As Byte, bb As Byte, r As Integer
   aa = 59
   bb = 58
   r = aa - bb
   MsgBox r
End Sub




pero así ...




Option Explicit

Private Sub Form_Load()
    Dim aa As Byte, bb As Byte, r As Integer
    aa = 2
    bb = 58
    r = aa - bb
    MsgBox r
End Sub











Adrian Desanti