Побитовый сдвиг массива?

Есть массив типа [FFFF, FFFF, ...., FFFF, 3FFF], нужно получить [7FFF, FFFF, ...., FFFF, 9FFF], то есть сдвинуть весь массив на один бит. Как я понял, подобные задачи в Си решаются ассемблерными вставками, потому что там есть возможность сохранить вытесненный сдвигом бит. Но мне интересно любое решение этой задачи)
  • Вопрос задан
  • 1099 просмотров
Решения вопроса 1
longclaps
@longclaps
псевдокод
int mask=0;
for i in 0..len(arr)-1{
    int newmask = arr[i]&1==0 ? 0 :0x8000;//
    arr[i]=(arr[i]>>1)  | mask;
    mask = newmask; 
}


В примере ошибка: последний элемент 0x3FFF -> 0x9FFF
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@alex_ak1
rem = 0;
for( i = len-1; i > 0; i++ )
{
rem = (arr[i] & 1);
arr[i] = (arr[i] >> 1) | (rem << 31);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы