C中的位移位

时间:2010-10-14 00:17:36

标签: c bit-manipulation shift

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 个答案:

答案 0 :(得分:9)

立即开始磨练您的调试技巧。如果您将成为任何形式的工程师,您将需要编写各种类型的程序,因此将一直在调试。

开始调试的一种简单方法是将print语句放入其中,以查看代码在其消失之前的程度。我建议你先将错误隔离开来。

答案 1 :(得分:2)

不确定seg故障,但我认为

if((x & 128) == 1)  

应该是

if((x & 128) == 128)

或只是

if(x & 128)  

答案 2 :(得分:1)

我试过我的电脑(MacBookPro / Core2Duo)并且它有效。 顺便问一下,你的目标架构是什么?当您使用C运算符“&gt;&gt;”时,一些(许多)处理器执行旋转而不是移位和“&lt;&lt;”。

答案 3 :(得分:0)

当您使用^时,您不是指或运算符|