Foro de elhacker.net

Programación => 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

Código:
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
  1. Option Explicit
  2. Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (Dest As Any, Src As Any, ByVal DestL As Long)
  3.  
  4. Private Sub Form_Load()
  5.    Dim a As Long
  6.    Dim b As Long
  7.    Dim l As Long
  8.  
  9.    a = CDec(4195038069#)
  10.    MoveMemory l, ByVal VarPtr(a) + 8, 4
  11.  
  12.    b = &HF0F
  13.    Debug.Print (l And b)
  14. 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