Autor Tema: Consulta sobre "And Not" sobre un valor  (Leído 5896 veces)

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

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Consulta sobre "And Not" sobre un valor
« en: Agosto 08, 2009, 05:00:06 pm »
Hola, para romper el hielo pregunto primero  ;D

Tengo un código que extraje de algún lugar y no logro interpretarlo.
Bien en determinada parte del código hay que redimensionar un array según la cantidad de Bits por Pixel de una imágen
mi duda es qué es lo que hace cuando utiliza "And Not" es los siguientes cálculos

Código: [Seleccionar]
    Select Case BitsPerPixel
 
        Case 1
            lngStride = ((bi24BitInfo.bmiHeader.biWidth + 31) And Not 31) \ 8
        Case 4
            lngStride = ((bi24BitInfo.bmiHeader.biWidth + 7) And Not 7) \ 2
        Case 8
            lngStride = (bi24BitInfo.bmiHeader.biWidth + 3) And Not 3
        Case 16
            lngStride = ((bi24BitInfo.bmiHeader.biWidth * 2) + 2) And Not 2
        Case 24
            lngStride = ((bi24BitInfo.bmiHeader.biWidth * 3) + 3) And Not 3
        Case 32
            lngStride = bi24BitInfo.bmiHeader.biWidth * 4
       
    End Select

    ReDim bBytes((bi24BitInfo.bmiHeader.biHeight * lngStride) - 1)

es algo así como utilizar la función mod?

para probar hice esto

Código: [Seleccionar]
Private Sub Form_Load()

    Dim x As Long
   
    x = ((5 * 3) + 3) And Not 3
    MsgBox x '= 16
   
    x = ((5 * 3) + 3) And Not 4
    MsgBox x '= 18

End Sub

pero sigo sin entender qué es lo que hace el "And Not"

Saludos

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Consulta sobre "And Not" sobre un valor
« Respuesta #1 en: Agosto 08, 2009, 08:31:59 pm »
Hola, mira vos no lo conocia, parece ser que no toma el valor la linea si es igual a lo que le pones despues del And Not...por ejemplo hice una funcion tonta para darme cuenta...

Código: [Seleccionar]
Private Sub Form_Load()
   Call Prueba(3)
End Sub

Private Function Prueba(ByVal vNumero As Integer) As Integer
   Dim b As Integer
   b = 0
   
   Select Case vNumero
      Case 3
            b = 2 + 1 And Not 1
            Debug.Print b
   End Select
   
   a = b
End Function

entra en el case, 2+1 =3 pero como le pongo And Not 1 solo toma el 2...y si le pongo el 2 solo devuelve el 1.. jeje

saludos.




coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:Consulta sobre "And Not" sobre un valor
« Respuesta #2 en: Agosto 09, 2009, 01:43:22 pm »
si no me equivoco, usa los Booleans, por ejemplo,
Código: [Seleccionar]
If 2 Then
 Msgbox "hola"
End If

el valor boolean puede ser un Long, Int o algun numero. Si es 0, indica False, de lo contrario True.

pero tambien estuve fijandome, si haces un And Not con 2 numeros, el resultado es un valor booleano, (0 o 1). pero vos fijate:
Código: [Seleccionar]
    Debug.Print 1 And 5 'devuelve 1 = true
    Debug.Print 1 And 3 'devuelve 1 = true
    Debug.Print 1 And 4 'devuelve 0 = false
    Debug.Print 2 And 4 'devuelve 0 = false
    Debug.Print 0 And 5 'devuelve 0 = false

sinceramente nose que corno hace, es extraño esto de bool con numeros.

saludos

'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

k_arlytos

  • Megabyte
  • ***
  • Mensajes: 211
  • Reputación: +2/-4
    • Ver Perfil
Re:Consulta sobre "And Not" sobre un valor
« Respuesta #3 en: Agosto 10, 2009, 05:16:33 am »
Saliendome del tema para que sirven los friend que diferencia hay o en q momento se usa

"estaba buscando un buen foro parece que ya lo encuentre :D"
"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:Consulta sobre "And Not" sobre un valor
« Respuesta #4 en: Agosto 10, 2009, 08:39:40 pm »
Saliendome del tema para que sirven los friend que diferencia hay o en q momento se usa

"estaba buscando un buen foro parece que ya lo encuentre :D"

no va aca esto, y busca en google.

de todas formas, fijate aca:
http://www.canalvisualbasic.net/foro/visual-basic-6-0/friend-sub-para-que-es-6368/

saludos
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Consulta sobre "And Not" sobre un valor
« Respuesta #5 en: Agosto 10, 2009, 08:45:11 pm »
jaja bueno la verdad no me quedo nada claro pero ya fue, tambien pregunte en un foro de matematica y me dieron una respuesta pero en fin.... [link]


Saliendome del tema para que sirven los friend que diferencia hay o en q momento se usa

"estaba buscando un buen foro parece que ya lo encuentre :D"

bueno ira en otro post pero como sos el segundo en preguntar algo se hace una excepción  ;)

Bueno los Amigos sirven para cuando tenes un problema ellos te pueden ayudar o para manguearte cuando se quedan si plata ( ;D ;D Chiste malo)

No en serio,  cuando declaramos una Funcion o Sub como Friend se puede utilizar solo dentro del mismo proyecto, por ejemplo si vos creas una dll o un ActiveX, y tenes un modulo clase en el que declaraste Friend function EnumerarClaves() as Boolean  esta funcion la podes llamar desde cualquier lado dentro del proyecto, por ejemplo otro modulo/formulario, ahora cuando compilas esta dll/ActiveX  y la cargas en otro proyecto ya no podes acceder más a esa funcion.
Esto sirve para protejer el uso externo de esta funcion, es decir son amigas dentro del mismo proyecto.

bueno esta es mi triste explicación, algo mas detallado pero creo que menos entendible podes mirar en la MSDN

Saludos



cobein

  • Moderador Global
  • Gigabyte
  • *****
  • Mensajes: 348
  • Reputación: +63/-0
  • Más Argentino que el morcipan
    • Ver Perfil
Re:Consulta sobre "And Not" sobre un valor
« Respuesta #6 en: Agosto 11, 2009, 01:23:35 am »
A ver, voy a romper los huevos.. digo el hielo con mi primer post. "A desempolvar mis conocimientos de alfareria!!"

Bien AND como OR, XOR, etc es un operador booleano , que pinga es? bueno el coco tendria que saberlo si es que sabe compuertas logicas!

mmm Ahi va mi tabla

0 1 0 1
0 0 1 1
---------
0 0 0 1

que es eso? bueno ahora voy a intentar explicarlo

Ej: 3 and 1 = 1

bien si convertimos esto a binario va a ser algo asi

1 1 <----3
0 1 <-----1
----
0 1<-----1 resultado

bien, siguiendo la logica de la tabla cuando tengamos dos 1 el resultado va a ser 1.

Ahora el not simplemente invierte, niega el resultado.

0 1<-----1 resultado , si lo invertimos es 1 0 que es igual a 2

Bueno espero que alguno entienda esto...

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Consulta sobre "And Not" sobre un valor
« Respuesta #7 en: Agosto 11, 2009, 03:26:03 pm »
perfecto  ;D ahora si se entendio, se pasa el valor a binario y luego en la suma de cada valor si ambos son positivos da un positivo y el resultado lo pasamos a decimal.

4 and 5 = 4
100
101
---
100

y en el caso de And Not se resta el segundo valor al primero, pero los numeros no pasan a negativo sino que quedan en 0 ej: 0-1 =0

'5 and not 3 =4
'101
'011
'----
'100

'3 and not 3 = 0
'011
'011
'----
'000

'8 And Not 5 = 8
'1000
'0101
'----
'1000

Muchas gracias.