Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: LeandroA en 1 Noviembre 2009, 02:27 AM

Título: Desbordamiento
Publicado por: LeandroA en 1 Noviembre 2009, 02:27 AM
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
Título: Re: Desbordamiento
Publicado por: YST en 1 Noviembre 2009, 03:58 AM
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
Título: Re: Desbordamiento
Publicado por: seba123neo en 1 Noviembre 2009, 04:55 AM
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 (http://msdn.microsoft.com/es-es/library/wz3k228a%28VS.80%29.aspx)

saludos.
Título: Re: Desbordamiento
Publicado por: LeandroA en 1 Noviembre 2009, 06:01 AM
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.

Título: Re: Desbordamiento
Publicado por: LeandroA en 1 Noviembre 2009, 06:22 AM
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