Autor Tema: Como rotar a la derecha o izquierda una variable o registro.  (Leído 9254 veces)

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

Desconectado FranSolo

  • PIC10
  • *
  • Mensajes: 5
Como rotar a la derecha o izquierda una variable o registro.
« en: 05 de Febrero de 2010, 06:02:20 »
Hola muy buenas:

Estoy buscando informacion, de como rotar a la derecha o a la izquierda un valor de una variable tipo int.

De tal manera que si: int i = 0b00000001 cuando la rotacion a la izquierda, el contenido de la variable sea i = 0b00000010.

He buscado informacion, y dicen que usando Rlncf (var,x,x); se puede rotar el contenido, pero lo he probado asi tal cual y no lo consigo. Tambien lei que en C usando val>>numero, donde numero es el numero de desplazamiento o rotaciones se consigue rotar el registro, pero tampoco me ha funcionado.

Si tutelarme en el tema, muchas gracias ^^

Desconectado erdanieee

  • PIC10
  • *
  • Mensajes: 44
Re: Como rotar a la derecha o izquierda una variable o registro.
« Respuesta #1 en: 05 de Febrero de 2010, 06:12:22 »
¿Qué C utilizas? En ccs están las funciones shift_left() y shift_right()...

Desconectado FranSolo

  • PIC10
  • *
  • Mensajes: 5
Re: Como rotar a la derecha o izquierda una variable o registro.
« Respuesta #2 en: 05 de Febrero de 2010, 06:18:35 »
Estoy utilizando el C18 de Mplab.  :oops: perdon por el despiste en el lenguaje.

Desconectado FranSolo

  • PIC10
  • *
  • Mensajes: 5
Re: Como rotar a la derecha o izquierda una variable o registro.
« Respuesta #3 en: 05 de Febrero de 2010, 08:12:30 »
Me respondo  a mi mismo:

Cuando se quiere rotar el contenido de una variable en C18 se recomienda usar:

Rlcf(var, dest, access) rota la variable a la izquierda contando con el bit de acarreo
Rlncf(var, dest, access) rota la variable a la izquierda sin contar con el bit de acarreo
Rrcf(var, dest, access) rota la variable a la derecha contando con el bit de acarreo
Rrncf(var, dest, access)rota la variable a la derecha sin contar con el bit de acarreo

Ahi que tener en cuenta una cosa y es que la variable tiene que estar declarada a nivel global, es decir fuera de cualquier funcion y de la funcion main.

Un ejemplo:
var = 0b00000001;

main()
{
Rlncf(var,1,1);
}

Otra manera es con el operando << solo que este no es de rotacion, es como un empujon.

var = 0b10000001;

main()
{
var = var<<1;
}

cada vez que se ejecute el operador << sobre la variable hara los siguiente 0000 0010 primera vez 0000 0100 segunda vez 0000 1000 tercera vez. El bit mas alto desaparece y aparece un bit a cero en la parte mas baja.

He investigado un poco en los foros de microchip hablan mucho del tema pero no soy un experto aun en ello. De todas cualquier sugerencia para completar mi respuesta sera bien recibida.  :o