Hola alguien puede explicarme que significa >> en esta línea.
Dim hh As Integer
Dim s As Integer = ((h >> 15) And 1)
Hola alguien puede explicarme que significa >> en esta línea.
Dim hh As Integer
Dim s As Integer = ((h >> 15) And 1)
Significa desplazamiento a la derecha a nivel de bits. Aparentemente se está comprobando el valor del bit que está en la posición 15 (siendo 0 la posición del bit menos significativo), o sea al final tendrás en s 1 ó 0 según el valor de ese bit.
Saludos.
La doctrina en cuestión es la siguiente: no es deseable creer una proposición cuando no existe fundamento para suponer que sea cierta. [Bertrand Russell]
Muchísimas gracias, entonces and supongo que será una de las operaciones que se realizan con binarios como xor,etc..
Me gustaría hacerte otra pequeña cuestión, que me trae de cabeza en estos días.Estoy tratando de leer un int 32 de un archivo, este int 32 está escrito en big endian, creé un binary con encoding big endian para ese stream pero cada vez que leo ese int32 en vez de devolverme el valor que tendría en big endian me devuelve el que tiene en little endian.Sabes cómo puedo solucionar esto?
he encontrado una función hecha por alguien para leer un int32 bigendian de un stream, pero no la logro entender bien, alguien puede explicarmela paso a paso para entender cómo hace la conversión a big endian?
Public Function Readint32BigEndian() As Integer
Dim num As Integer = (CdfStream.ReadByte << &H18)
num = (num Or (CdfStream.ReadByte << &H10))
num = (num Or (CdfStream.ReadByte << 8))
Return (num Or CdfStream.ReadByte)
End Function
Aún me estoy recuperando de la frase "entonces and supongo que será una de las operaciones que se realizan con binarios como xor,etc.."... jajaja...
Y si una vez que entendemos lo del And, inmediatamente nos metemos en big-endian y little-endian... que yo no tenía ni idea y si la tenía no me acuerdo... entonces apaga y vámonos
Como yo soy de VB6 no conozco Stream ni ReadByte, pero suponiendo que hacen lo que su nombre dice...:
Si suponemos que num es un entero de al menos 32 bits, dividiéndolo en 4 bytes será de la forma:
num = 4 3 2 1 (big endian, siendo 4 el Byte más significativo)
Ahora bien, si lo estás leyendo, digamos de un archivo de texto que representa los números en formato big endian, primero te vas a encontrar con el bit 4 al hacer ReadByte.
Entonces lo desplazas 3 bytes a la izquierda (24 bits, que es 18 en hexadecimal) y ya tenemos en num:
num = 4 _ _ _ (si no, tendríamos _ _ _ 4 que no es lo que queremos)
Después lees otro byte, lo desplazas 2 bytes a la izquierda (16 bits, 10 en hexadecimal) haces un OR con num y ya tenemos:
num = 4 3 _ _
Y así sucesivamente.
Saludos.
La doctrina en cuestión es la siguiente: no es deseable creer una proposición cuando no existe fundamento para suponer que sea cierta. [Bertrand Russell]
Muchísimas gracias por la explicación, está muy bien hecha.
Para rematar ya las cosas me gustaría entender bien como funciona Or en este código, si no es mucha molestia podrías explicármelo?es que no es fácil encontrar gente que explique las cosas tan bien como lo haces tú