# include // // Program 12.4, Stephen Kochan, Programming in C. // int main ( void ); unsigned int rotate ( unsigned int value, int n ); int main ( void ) { unsigned int w1 = 0xabcdef00u; unsigned int w2 = 0xffff1122u; printf ( "%x\n", rotate ( w1, 8 ) ); printf ( "%x\n", rotate ( w1, -16 ) ); printf ( "%x\n", rotate ( w2, 4 ) ); printf ( "%x\n", rotate ( w2, -2 ) ); printf ( "%x\n", rotate ( w1, 0 ) ); printf ( "%x\n", rotate ( w1, 44 ) ); return 0; } unsigned int rotate ( unsigned int value, int n ) { unsigned int result; unsigned int bits; if ( 0 < n ) { n = n % 32; } else { n = - ( ( - n ) % 32 ); } if ( n == 0 ) { result = value; } else if ( 0 < n ) { bits = ( value >> ( 32 - n ) ); result = ( value << n ) | bits; } else { n = - n; bits = ( value << ( 32 - n ) ); result = ( value >> n ) | bits; } return result; }