Найти число в 8 раз меньше заданного не использую деления и сдвиги на Си

Не понятно, возможно ли вообще сдвинуть число, не используя <<, >> Например, с помощью операции И можно младшие три бита превратить в ноль, но как обрезать данные три нуля, не используя сдвиги совсем не понятно


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Битовые операции без сдвигов, умножений и делений:

#include "stdio.h"

int main() {
    unsigned n;
    scanf("%u", &n);

    unsigned m = 0;
    for (unsigned b8 = 8, b1 = 1; b8 != 0; b8 += b8, b1 += b1) {
        if ((b8 & n) != 0) {
            m |= b1;
        }
    }
    printf("%u\n", m);
}
→ Ссылка