• Showing Page History #107039

#include <stdio.h>

int count_bits(unsigned x) { int count = 0; while(x){ if ( x & 1U ) count++; x >>= 1; } return count; }

int int_bits(void) { return count_bits(~0U); }

void print_bits(unsigned x) { int i; for ( i = int_bits() - 1; i >= 0; i-- ) putchar((( x >> i ) & 1U ) ? '1' : '0'); putchar('\n'); }

unsigned rrotate(unsigned x, int n) { int width = int_bits(); return x >> n % width | x << (width - n % width); }

unsigned lrotate(unsigned x, int n) { int width = int_bits(); return x << n % width | x >> (width - n % width);

}

int main(void) { unsigned no, nor, nol; int n; printf("非負の整数を入力してください。:"); scanf("%u", &no); puts("ビットの中身"); print_bits(no); printf("何ビット回転しますか?:"); scanf("%d", &n); puts("右に回転した後の内容"); nor = rrotate(no, n); print_bits(nor); puts("左に回転した後の内容"); nol = lrotate(no, n); print_bits(nol); return 0; }