2012-06-10 18 views
7

Tengo un conocimiento básico de los operadores bit a bit. Sin embargo, no entiendo cómo se asigna el valor. Si alguien puede señalarme en la dirección correcta, estaría muy agradecido.¿Cómo se manipula un valor hexadecimal a nivel de bits?

Mi Hex Dirección: 0xE0074000

El valor decimal: 3758571520

el valor binario: 11100000000001110100000000000000

que estoy tratando de programar un microcontrolador simple y utilizar el acceso Clase Registro en Microsoft. Net Micro Framework para hacer que el controlador haga lo que yo quiero que haga.

Register T2IR = new Register(0xE0074000); 
T2IR.Write(1 << 22); 

En mi ejemplo anterior, ¿cómo se mueven los bits en la representación binaria? No entiendo cómo la gestión de bits se asigna a la dirección en forma binaria.

Si alguien puede señalarme en la dirección correcta, estaría muy agradecido.

Respuesta

9

Olvídate de los decimales para empezar. Volverás a eso más tarde.

Primero debe ver la lógica entre HEX y BINARY.

bien, para un byte tiene 8 bits (# 7-0)

#7 = 0x80 = %1000 0000 
#6 = 0x40 = %0100 0000 
#5 = 0x20 = %0010 0000 
#4 = 0x10 = %0001 0000 

#3 = 0x08 = %0000 1000 
#2 = 0x04 = %0000 0100 
#1 = 0x02 = %0000 0010 
#0 = 0x01 = %0000 0001 

Cuando se lee que en en un byte, como éste% 00001000

Entonces el conjunto binario, poco , es el 4º de la derecha aka bit # 3 que tiene un valor de 08 hex (de hecho también decimal, pero aún se olvida de decimal mientras calcula hex/binario)

Ahora si tenemos el número binario% 10000000 Este es el bit # 7 que está activado. Eso tiene un valor hexadecimal de 0x80

Así que todo lo que tiene que hacer es resumirlas en "picar" (cada parte del byte hexadecimal se llama un mordisco por algunos frikis)

el máximo que puede conseguir en un nibble es (decimal) 15 o F como 0x10 + 0x20 + 0x40 + 0x80 = 0xF0 =% binario 11110000

por lo que todas las luces en (4 bits) en un cuarteto = F en hexadecimal (15 decimal)

lo mismo ocurre con el mordisco inferior.

¿Ves el patrón?

+0

sí, veo lo Esta parte funciona, gracias por la excelente explicación! Entonces, si tenemos un valor de 000011001000 y hacemos esto (8 << 1), esto nos dejaría con esto 000111001000. ¿Es así? –

+0

Entonces, si tuviéramos una matriz de 1 y 0 binarios que tuvieran 32 bits de longitud y quisiéramos cambiar el bit 8 por 1, ¿podríamos simplemente modificar el único valor? por ejemplo: bin [7] = 1; ?? –

+0

yendo más lejos, si quisiéramos hacer esto (8 << 3) sería correcto: bin [7] = 1; bin [8] = 1; bin [9] = 1; ? –

3

Consulte la respuesta de @ BerggreenDK para saber qué es un cambio. Aquí hay información sobre cómo es el hex (lo mismo, solo una representación diferente):

El desplazamiento es un concepto muy simple de entender. El registro es de un tamaño fijo, y los bits que no encajan caen del final. Por lo tanto, tome este ejemplo:

int num = 0xffff << 16;

Su variable en hexadecimal sería ahora 0xffff0000. Observe cómo el extremo derecho está lleno de ceros. Ahora, cambiemos de nuevo.

num = num << 8; 
num = num >> 8; 

num es ahora 0x00ff0000. No recuperas tus viejos fragmentos. Lo mismo se aplica a los cambios correctos también.

truco: desplazamiento a la izquierda 1 es como multiplicar el número por 2, y el desplazamiento a la derecha 1 es como número entero que divide todo por 2.

+0

El problema no está en el operador Bitwise. El problema está en las clases y cómo las clases asignan la información a la dirección de registro. Entonces en este caso: Register.SetBits ((3 << 8)); // Manipula Bits en el registro ... ¿Cómo se asignarían los Bits? ¿Cómo sabe el Registro dónde y qué bits manipular? Si sabemos por la Hoja de datos que necesitamos el bit 3 Set en 1, ¿cómo resolvemos la operación Bitwise correcta para hacer esto? –

+0

Enlace URL: [Registrar documentación de clase] (http://www.ghielectronics.com/downloads/NETMF/Library%20Documentation/html/73f12956-6a7d-d693-6db8-4ec605c50f2d.htm) Enlace a la documentación. Es breve y no me da una respuesta. –

+0

Ok, un momento de Eureka, los bits de valor 1 en máscara se establecen en el registro. Los bits de valor 0 en la máscara no se cambian. Entonces necesitamos calcular el valor Binario para establecer, antes de asignar el valor al registro. Entonces, si queremos configurar 0010011 (0) 11 entre corchetes, entonces necesitamos analizar un binario de 0100 para establecer este BIT. Woohooo finalmente! –

Cuestiones relacionadas