Сдвиг немного в C

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 ответа

Решение

Я попробовал на своем компьютере (MacBookPro / Core2Duo), и это сработало. Кстати, какова ваша целевая архитектура? Некоторые (многие) процессоры выполняют ротацию вместо сдвигов, когда вы используете операторы C ">>" и "<<".

Начните оттачивать свои навыки отладки сейчас. Если вы собираетесь стать инженером в любой форме, вам нужно будет написать несколько программ, и таким образом вы будете отлаживать всю свою жизнь.

Простой способ начать отладку - поместить операторы print, чтобы увидеть, как далеко ваш код делает его до того, как он умрет. Я рекомендую вам начать с изоляции ошибки.

Не уверен насчет ошибки сега, но я думаю

if((x & 128) == 1)  

должно быть

if((x & 128) == 128)

или просто

if(x & 128)  

Когда вы используете ^ Вы не имеете в виду или оператор |?

Другие вопросы по тегам