Как найти младший бит заданого числа?
Для заданого положительного целого A (1 ≤ A ≤ 100), вывести младший бит A. К примеру, если A = 26, то его мы можем записать в двоичном виде, как 11010, младший бит A составляет 10, и на выходе должно быть 2.Другой пример выглядит следующим образом: при A = 88, это число A мы можем записать в двоичной форме 1011000, младший бит у A является 1000, и на выходе должно быть 8.
Входные данные Каждая строка входных данных содержит только одно целое число A (1 ≤ A ≤ 100). Строка, которая содержащий "0" обозначает конец ввода, и эта строка не является частью входных данных. Исходные данные: для каждого числа a, полученного на входе, в отдельной строке вывести его значение младшего бита. Нужно написать на Python
Ответы (3 шт):
Младший бит числа можно найти, преобразовав его в двоичный вид и находя первый "1" в справа. Мы можем преобразовать число в двоичный вид с помощью встроенной функции bin в Python.
def find_least_significant_bit(a):
binary = bin(a)
least_significant_bit = binary.rfind("1") + 1
return 2**(len(binary) - least_significant_bit)
Чтобы использовать эту функцию, нам нужно читать числа, пока они не равны 0, и вызывать find_least_significant_bit для каждого из них:
while True:
a = int(input().strip())
if a == 0:
break
print(find_least_significant_bit(a))
PS. Надеюсь хоть не много помог)
можно проверять делимость на степени двойки
A = 88
t = 2
while not A % t:
t *= 2
print(t//2) # 8
Ммм.... Я все же останусь в касте истинно верующих в то, что "младший бит" любого числа это всегда последний разряд в двоичном представлении и он получается просто как результат остатка от деления на 2
A = 88
bit = A % 2
print(f"Младший бит числа {A} равен {bit}\n")
Выведет:
Младший бит числа 88 равен 0
Но если вдруг все же вам надо найти первый значимый (равный единице) бит справа и вернуть полученное таким образом число, то... Вообще-то можно представить число в двоичной форме, преобразовать в строку, разбить на подстроки по разделителю "1". Длина последнего элемента массива будет искомой степенью двойки )))
Такой вот забавный код
A = 88
Anew = str(bin(A))
print(f"{A} в двоичной записи равно {Anew}")
Anew = Anew.split('1')
degree = len(Anew[-1])
print(f"Наименьшее значимое справа будет 1{Anew[-1]}")
res = 2**degree
print(f"2 в степени {degree} будет {res}\n")
Выведет:
88 в двоичной записи равно 0b1011000
Наименьшее значимое справа будет 1000
2 в степени 3 будет 8