c言語による2のべき乗
右、左シフトと2のべき乗による乗除算が同じことを証明するプログラムを作っているのですがうまくいきません。
プログラムを載せるのでどこが間違っているのかご教授お願いします。
#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');
}
int main(void){
unsigned nx, no, n1, n2;
printf("非負の整数を入力してください:");
scanf("%u", &nx);
printf("何ビットシフトしますか?:");
scanf("%u", &no);
n1=nx * (2^no);
n2=nx / (2^no);
printf("\n整数 = "); print_bits(nx);
printf("\n左にシフトした値 = "); print_bits(nx << no);
printf("\n右にシフトした値 = "); print_bits(nx >> no);
printf("\n2のべき乗で乗算した値 = "); print_bits(n1);
printf("\n2のべき乗で除算した値 = "); print_bits(n2);
putchar('\n');
return(0);
}
お礼
ありがとうございました。よくわかりました。