Desbordamiento

Iniciado por LeandroA, 1 Noviembre 2009, 02:27 AM

0 Miembros y 2 Visitantes están viendo este tema.

LeandroA

buenas estoy teniendo un problema con lo siguiente


Private Sub Form_Load()

    Dim a As Double
    Dim b As Double
   
    a = 4195038069#
    b = &HF0F
   
    Debug.Print a And b

End Sub


esto me esta dando un error 6 Desbordamiento

estoy intentando pasar una funcion de PHP a visual basic, en PHP no da error y me imprime como resultado "773"  probe esto mismo en la calculadora de windows y tambien "773"
ahora no se porque visual basic no permite esta operaciones.
abra una forma de realizar la operación.?¿?

Saludos

YST

Talvez el and no soporte mas arriba de un rango de numeros y por eso este el error :xD

PD: No estoy seguro pero creo que esa es la razón


Yo le enseñe a Kayser a usar objetos en ASM

seba123neo

Hola, no estoy muy metido en als operaciones de bit a bit de esta forma pero investigando arme algo asi:

Código (vb) [Seleccionar]
Option Explicit
Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (Dest As Any, Src As Any, ByVal DestL As Long)
   
Private Sub Form_Load()
    Dim a As Long
    Dim b As Long
    Dim l As Long
   
    a = CDec(4195038069#)
    MoveMemory l, ByVal VarPtr(a) + 8, 4
   
    b = &HF0F
    Debug.Print (l And b)
End Sub


y retorna 773. en .NET funciona sin hacer tanto lio, o sea funciona como lo pusiste primero. si alguien sabe la forma sin hacer todo eso mejor.aca dice algo del tema y dice de algunas limitaciones en los tipos de datos a lo ultimo de la pagina, si no lei mal.

Operadores lógicos y bit a bit en Visual Basic

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

LeandroA

hola Seba gracias por la respuesta, pero sigo con error de desbordamiento

a = CDec(4195038069#)

creo que es mas complicado de lo que pensaba. pero en fin voy a seguir buscando.

Saludos.


LeandroA

Listo que boludo lo esta haciendo en otra parte del codigo y no me di cuenta



Private Sub Form_Load()

    Dim a As Double
    Dim b As Double

    a = 4195038069#
    b = &HF0F
   
debug.print fsafe(a,b)
end sub


Private Function fSafe(Val1 As Double, Val2 As Double) As Double
Dim R As Double
If Val1 > 2147483647 Then
    Val1 = Val1 - 4294967296#
End If

fSafe = Val1 And Val2

End Function