Предполагается, что последние k
биты числа произвольного размера n
будут установлены в ноль. Например, если бы я хотел укоротить 0b10011101
на 3, результат был бы 0b10011000
.
. Я подумал о нескольких возможных решениях, таких как использование сдвигов и других бинарных операторов или даже манипулирование строками. ,Два из них следующие:
def truncate_bin_shift(n, k):
return n >> k << k
def truncate_bin_and(n, k):
return n & ((1<<n.bit_length()-k)-1 << k)
Мой любимый - сдвиг вперед и назад, учитывая, насколько он чист, но мне интересно, есть ли другая альтернатива, которая могла бы быть значительно более эффективнойдля больших значений n
.
Вопрос заключается в том, можно ли считать какой-либо из них эффективным и подходящим (читай питонским) способом для его достижения.
Если нет, то что будетлучше и почему?