3
int x = 2;

x = rotateInt('L', x, 1); // should return 4

x = rotateInt('R', x, 3); // should return 64

これがコードです。誰かがそれをチェックして、エラーが何であるかを教えてもらえますか?

コンパイルは成功していますが、Segmentation Fault実行すると表示されます。

int rotateInt(char direction, unsigned int x, int y)
{
  int i;

  for(i = 0; i < y; i++)
  {  

    if(direction == 'R')
    {
       if((x & 1) == 1)
       {
         x = x >> 1;
         x = (x ^ 128);     
       }
       else    
         x = x >> 1;
     }
     else if(direction == 'L')
     {
       if((x & 128) == 1)  
       {
         x = x << 1;
         x = (x ^ 1);     
       }  
       else
       x = x << 1;
     }
   }
   return x;   
 }
4

4 に答える 4

9

今すぐデバッグ スキルを磨いてください。何らかの形のエンジニアになる場合は、さまざまなプログラムを作成する必要があるため、一生デバッグを行うことになります。

デバッグを開始する簡単な方法は、print ステートメントを挿入して、コードが終了する前にどれだけ進んだかを確認することです。エラーを切り分けることから始めることをお勧めします。

于 2010-10-14T00:21:13.287 に答える
2

セグメンテーション違反についてはわかりませんが、私は思います

if((x & 128) == 1)  

する必要があります

if((x & 128) == 128)

あるいは単に

if(x & 128)  
于 2010-10-14T00:24:34.403 に答える
1

自分のコンピューター (MacBookPro / Core2Duo) で試してみたところ、うまくいきました。ところで、あなたのターゲット アーキテクチャは何ですか? 一部の (多くの) プロセッサは、C 演算子 ">>" および "<<" を使用すると、シフトではなくローテーションを実行します。

于 2010-10-14T00:29:27.210 に答える
0

あなたが使うとき、あなた^はまたは演算子を意味しません|か?

于 2010-10-14T00:25:48.697 に答える