私はプログラムを動作させようとしています。ここでは、ビットを左にシフトし、シフトしたビットを右に追加します。たとえば00111000
のように、4つの位置を左にシフトすると、結果は10000011
になります。どのように私はこの作品を作ることができる、私はビットORを使用する必要があることを知っている。私は以下の主な機能を追加しました。ビットを左に回転し、回転したビットを右に追加する方法
#include <stdio.h>
#include <stdlib.h>
void printbits(int b){
int i;
int s = 8 * (sizeof b) - 1; /* 31 if int is 32 bits */
for(i=s;i>=0;i--)
putchar(b & 1<<i ? '1' : '0');
}
int main(){
char dir; /* L=left R=right */
int val, n, i;
scanf("%d %d %c",&val, &n, &dir);
printbits(val);putchar('\n');
for (i=0; i<10; i++){
if (dir=='L' || dir =='l')
rotateLeft(&val, n);
else
rotateRight(&val,n);
printbits(val); putchar('\n');
}
return;
}
これはrotateLeftとrotateRight関数です。 1ビットn
のビット回転を左
#include <stdio.h>
#include <stdlib.h>
void rotateLeft(int *val, int N){
int num = val[0];
int pos = N;
int result = num << pos;
}
void rotateRight(int *val, int N){
int num = val[0];
int pos = N;
int result = num >> pos;
}
「右にシフトされたビットを追加する」とはどういう意味ですか?左右にシフトして合計しますか? –
[同様の質問](http://stackoverflow.com/questions/776508/best-practices-for-circular-shift-rotate-operations-in-c)。署名された 'int'のサインビットでビットを投げ捨てるならば、あなたは懐中電灯を使わずにピッチ黒の崖の端を歩いていることに注意してください。 – WhozCraig
@BenceKaulics左の4つの位置に移動すると、その1が右に追加されます。私は説明が難しいです。ごめんなさい:S – Sullivan