2011-08-23 27 views
1

私はビットバイナリ番号 (C言語で)の左に循環シフトを実装するアルゴリズムを探しています。 アルゴリズムは>>右のスロットはゼロではなく、左から数を移動して表示されます。円内での循環シフト

右にシフトします。

+6

ここでの質問は何ですか?あなたは何を試しましたか? Stack Overflowは、プログラミングに関する特定の問題を議論するためのウェブサイトです。 「無料コードサービス」ではありません。それがあなたが探しているものなら、他の場所を見てください。 –

+0

可能な複製[単語のビットを回転する方法](http://stackoverflow.com/questions/4207546/how-to-rotate-the-bits-in-a-word) – zneak

+0

可能な複製のhttp:/ /tackoverflow.com/questions/2943265/circular-shift-c –

答えて

3

ここで考えられるのは、上位nビット(nビットシフトの場合)とorの場合のシフトされた番号の右側です。

これはあなたにスタートを与えるはずです。

+0

これは真実ですが、どのようにして上位nビットと1ビットを右に取りますか? –

+0

@Rudy:右シフトを使用する –

+0

はい、それは明らかです。それでも、人々にビットをマスクする方法やシフトする方法などは教えていません。 –

1
#define NUM_BITS_IN_INT ((sizeof(int) * 8) 

int rotleft(int num, int shift) 
{ 
    return (num << shift) | (num >> (NUM_BITS_IN_INT - shift)); 
} 

int rotright(int num, int shift) 
{ 
    return (num >> shift) | (num << (NUM_BITS_IN_INT - shift); 
} 
+0

なぜ 'return(n << 1)| (n <0); ' – Stan

+0

@Stan:可能ですが、有益なものではありません。そして、私はいつも私の予約をブール値を普通の整数として扱います。しかし、私の答えを編集しました。 –

+0

あなたの答えをありがとう。 負の数に問題があります – Yoyo