сдвиг немного в C - PullRequest
       43

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

3 голосов
/ 14 октября 2010
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 ]

9 голосов
/ 14 октября 2010

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

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

2 голосов
/ 14 октября 2010

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

if((x & 128) == 1)  

должно быть

if((x & 128) == 128)

или просто

if(x & 128)  
1 голос
/ 14 октября 2010

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

0 голосов
/ 14 октября 2010

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

...