1) См. Другой ответ со сдвигом
2) Для более сложных случаев, например, если вы хотите оставить правую или левую часть другого значения после или до 1, вы можете просто назначить полный ответ /результат из 16 возможных, с оператором case.
3) Вы также можете использовать цикл по всем битам, устанавливая их собственное логическое уравнение, например, 1, если равен счетчику, 0, если выше, бит источника, если под /еще и так далее ...