Сдвиг немного в 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)