アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語でプログラムを書いたのですが、うまくいかないので分かる方教えて頂きたいです。


左にビットを回転させる関数を作っていますが、うまくいきません。




一行目のunsigned short int x , int n はxは入力した数、yが回転させるビット数です。

以下が、今のところ作ったプログラムですが、一回しか回転ができません。


例を書くと、

f0f0という16進数を入力したときビット状態は

1111000011110000

となるのですが

3ビット左回転させたいのに

1ビットしか回転せず

1110000111100000

となってしまいます。

答えは1000011110000111なので、そうしたいです。

左端の数字が右端に何個か移動させていくプログラムです。





aunsigned short int rotate( unsigned short int x , int n ){

int bitto,mask,kazoe,a;

mask=1;

bitto = sizeof(x)*8; 

printf("%dビット回転すると\n",n);

while(n>0){

n--;

for(kazoe=1;kazoe<=bitto;kazoe++){

mask=mask<<(bitto-kazoe);

if(x&mask){ 

x=x<<1; 

mask=1;

a=kazoe-1;

mask=mask<<a;

printf("1");

}else{

x=x<<1; 

mask=1;

a=kazoe-1;

mask=mask<<a;

printf("0");


}

}

}

printf("\n");

}

A 回答 (1件)

while (n>0){



}
の間でどのような操作をしているのか, あなたの言葉で詳細を書いてください.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!