Oh yes, forgot it.
Code:
/* AUTH: Kevin Strijbos DATE: 02/02/2012
DESC: excercise 12.4 */
#include <stdio.h>
#include <stdlib.h>
void cycle_shift (unsigned char *number, int n);
int main (void)
{
unsigned char number;
int n;
printf("Enter a number: ");
scanf("%d", &number);
printf("How many positions do you want to shift: ");
scanf("%d", &n);
cycle_shift(&number, n);
printf("SHIFTED: %d\n", number);
return 0;
}
/* perfoms a cyclic shift */
void cycle_shift (unsigned char *number, int n)
{
unsigned char LBIT = 0x80;
unsigned char RBIT = 0x01;
int counter;
if (n >= 0)
{
/* left shift */
for (counter = 0; counter < n ;counter++)
{
if (LBIT & *number)
{
*number <<= 1;
*number += 1;
}
else
*number <<= 1;
}
}
else
{
/* right shift */
for (counter = 0; counter < n ;counter++)
{
if (RBIT & *number)
{
*number >>= 1;
*number += 128;
}
else
*number >>= 1;
}
}
}