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

当您使用时,您^不是指 or 运算符|吗?

于 2010-10-14T00:25:48.697 回答