Как найти количество единиц в числе питон

How do you count the number of ones in a given integer’s binary representation.

Say you are given a number 20, which is 10100 in binary, so number of ones is 2.

jamylak's user avatar

jamylak

128k30 gold badges230 silver badges230 bronze badges

asked Mar 21, 2013 at 6:24

Neil's user avatar

What you’re looking for is called the Hamming weight, and there are a lot of algorithms to do it. Here’s another straightforward one:

def ones(n):
    w = 0
    while (n):
        w += 1
        n &= n - 1
    return w

answered Mar 21, 2013 at 6:31

Cairnarvon's user avatar

CairnarvonCairnarvon

25.6k9 gold badges51 silver badges65 bronze badges

1

Use the awesome collections module.

>>> from collections import Counter
>>> binary = bin(20)[2:]
>>> Counter(binary)
Counter({'0': 3, '1': 2})

Or you can use the built-in function count():

>>> binary = bin(20)[2:]
>>> binary.count('1')
2

Or even:

>>> sum(1 for i in bin(20)[2:] if i == '1')
2

But that last solution is slower than using count()

answered Mar 21, 2013 at 6:27

TerryA's user avatar

TerryATerryA

58.6k11 gold badges114 silver badges142 bronze badges

9

>>> num = 20
>>> bin(num)[2:].count('1')
2

answered Mar 21, 2013 at 6:28

Yarkee's user avatar

YarkeeYarkee

8,9265 gold badges28 silver badges29 bronze badges

1

The usual way to make this blinding fast is to use lookup tables:

table = [bin(i)[2:].count('1') for i in range(256)]

def pop_count(n):
   cnt = 0
   while n > 0:
     cnt += table[n & 255]
     n >>= 8
   return cnt

In Python, any solution using bin and list.count will be faster, but this is nice if you want to write it in assembler.

vvvvv's user avatar

vvvvv

23.8k19 gold badges48 silver badges75 bronze badges

answered Mar 21, 2013 at 6:37

Torsten Marek's user avatar

Torsten MarekTorsten Marek

83k21 gold badges91 silver badges98 bronze badges

2

The int type has a new method int.bit_count() since python 3.10a, returning the number of ones in the binary expansion of a given integer, also known as the population count as follows:

n = 20
bin(n)
'0b10100'

n.bit_count() returns 2 as it has 2 ones in the binary representation.

answered Sep 19, 2020 at 19:04

Hamza's user avatar

HamzaHamza

5,2353 gold badges27 silver badges42 bronze badges

The str.count method and bin function make short work of this little challenge:

>>> def ones(x):
        "Count the number of ones in an integer's binary representation"
        return bin(x).count('1')

>>> ones(20)
2

answered Mar 21, 2013 at 6:29

Raymond Hettinger's user avatar

Raymond HettingerRaymond Hettinger

214k62 gold badges378 silver badges481 bronze badges

You can do this using bit shifting >> and bitwise and & to inspect the least significant bit, like this:

def count_ones(x):
    result = 0
    while x > 0:
        result += x & 1
        x = x >> 1
    return result

This works by shifting the bits right until the value becomes zero, counting the number of times the least significant bit is 1 along the way.

answered Jan 29, 2020 at 16:00

Brian Pursley's user avatar

I am a new coder and I found this one logic simple. Might be easier for newbies to understand.

def onesInDecimal(n):
  count = 0
  while(n!=0):
    if (n%2!=0):
        count = count+1
        n = n-1
        n = n/2
    else:
        n = n/2
  return count

answered Jun 24, 2017 at 13:22

Vivek Karn's user avatar

For a special case when you need to check quickly whether the binary form of the integer x has only a single 1 (and thus is a power of 2), you can use this check:

if x == -(x | (-x)):
    ...

The expression -(x | (-x)) is the number that you get if you replace all 1s except the last one (the least significant bit) in the binary representation of x with 0.

Example:

12 = 1100 in binary

-12 = …110100 in binary (with an infinite number of leading 1s)

12 | (-12) = …111100 in binary (with an infinite number of leading 1s)

-(12 | (-12)) = 100 in binary

answered Dec 27, 2021 at 23:35

Andrey Shutovich's user avatar

1

If the input number is ‘number’

number =20
len(bin(number)[2:].replace('0',''))

Another solution is

from collections import Counter

Counter(list(bin(number))[2:])['1']

1

Способ 1.

str(4**255 + 2**255 - 255).count('1')

Приводим к строке, вызываем строковый метод подсчета символа.

Способ 2.

sum(1 for elem in bin(4**255+ 2**255 - 255)) if elem == '1')

Считаем количество единиц, так как функция bin переводит к строковому типу вида ‘0bxxx’, где xxx — цифры числа в двоичном представлении.

Способ 3.

Также существует несложный алгоритм.

4^255 = 2^(255 * 2) степень двойки, будет обозначать единица в двоичном представлении данной суммы.

2^255 — аналогично.

С вычитанием интереснее, можно проследить следующую закономерность:

2^n - 2^m — будет содержать n - m единиц (проверьте это и докажите самостоятельно).

Отсюда сделаем следующий финт: -255 = -256 + 1 = -2^8 + 2^0

В итоге наше выражение: 2^(255 * 2) + 2^255 - 2^8 + 1 будет иметь 1 + (255 - 8) + 1 единицу, так как 2^255 - 2^8 четное число и значит нулевой бит у него будет нулевой и прибавление единицы добавит только единицу.

DeaZZZlee

1 / 1 / 0

Регистрация: 23.02.2020

Сообщений: 24

1

Сколько единиц в бинарной записи?[РЕШЕНИЕ]

27.04.2020, 13:42. Показов 35154. Ответов 8

Метки python, python 3.7 (Все метки)


Студворк — интернет-сервис помощи студентам

Сколько 1 в бинарной записи числа
Найти, сколько единиц содержит бинарная запись числа.

Входные данные: Целое неотрицательное число K.

Выходные данные: Сколько единиц содержит бинарная запись числа.

Примеры

Вход
5

Выход
2

Решение:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
x = int(input())
y = []
repeatValue = 0
while x >0: #подобие перевода в двоичную систему и пополнение значения в массив
    y.append(x%2)
    x//=2
    if x == 0:
        y.append(x%2)
        break
for k in range(len(y)): #нахождение кол-ва единиц
    if y[k] == 1:
        repeatValue+=1  
print(repeatValue)

Доработайте,если кому интересно или кто ищет — возьмите.



0



u235

4383 / 2492 / 526

Регистрация: 07.11.2019

Сообщений: 4,137

27.04.2020, 17:15

2

Python
1
2
x = int(input())
print(bin(x).count('1'))



2



1 / 1 / 0

Регистрация: 23.02.2020

Сообщений: 24

27.04.2020, 17:49

 [ТС]

3

Так раздел вроде для начинающих,типо подобный сахар новичкам вроде как ни к чему.



0



Эксперт по компьютерным сетям

5889 / 3347 / 1033

Регистрация: 03.11.2009

Сообщений: 9,975

27.04.2020, 17:57

4

потому что

Сколько единиц в бинарной записи?[РЕШЕНИЕ]



2



u235

27.04.2020, 19:29

Не по теме:

Jabbson, это же про Форт. :-)



0



1728 / 967 / 199

Регистрация: 22.02.2018

Сообщений: 2,694

Записей в блоге: 6

27.04.2020, 21:57

6

Цитата
Сообщение от DeaZZZlee
Посмотреть сообщение

Так раздел вроде для начинающих,типо подобный сахар новичкам вроде как ни к чему

Так это задача и вариант ее решения, который дал u235, для новичков. Функции bin и count это все из базовых знаний необходимых новичкам.
А Ваше решение из серии как простую задачу превратить в сложную.



1



Эксперт по компьютерным сетям

5889 / 3347 / 1033

Регистрация: 03.11.2009

Сообщений: 9,975

27.04.2020, 22:04

7

Цитата
Сообщение от Viktorrus
Посмотреть сообщение

А Ваше решение из серии как простую задачу превратить в сложную.

или ‘как решить задачу на си, используя синтаксис питона’



0



iSmokeJC

Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

16124 / 9007 / 2605

Регистрация: 21.10.2017

Сообщений: 20,712

27.04.2020, 22:20

8

Jabbson, не! Как решить задачу питона, использовав синтаксис си. Бугаг

Python
1
2
3
4
5
6
n = int(input())
count = 0
while n > 0:
    count += n & 1
    n >>= 1
print(count)



1



flash_back

20 / 20 / 20

Регистрация: 07.02.2016

Сообщений: 87

11.02.2021, 11:54

9

Python
1
2
3
4
5
6
x = int(input())
count = 0
while x:
   x, a = divmod(x, 2)
   count += a
print(count)



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

11.02.2021, 11:54

Помогаю со студенческими работами здесь

Посчитать сколько единиц есть в записи числа в двоичной системе счисления
Дано число N в десятичной системе счисления. Нужно посчитать сколько единиц есть в записи этого…

Число X перевели из десятичной в двоичную систему счисления.Сколько единиц получилось в двоичной записи числа?
(32^32+16^16-1)*8^8+4^4-1=X
Число X перевели из десятичной в двоичную систему счисления.Сколько…

Найти следующее число, в двоичной записи которого столько же единиц, сколько и в двоичном представлении числа N
Найти следующее число, в двоичной записи которого столько же единиц, сколько и в двоичном…

[NASM] Определить, в каком из трёх чисел единиц больше единиц в двоичной записи
Дано 3 числа в двоичной системе счисления. Определить, в каком числе число единиц больше. NASM…

Определить количество единиц в цифровой записи числа, кроме единиц в младших разрядах
Ребят,помогите,срочно надо! Сам что-то не понимаю(
Дано натуральное число N. Определить…

После бинарной записи файл всё равно остаётся пустым
Хочу организовать в программе запись во внешний файл, чтобы хранить данные, при необходимости…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

9

На чтение 3 мин Просмотров 776 Опубликовано 02.03.2023

Содержание

  1. Введение
  2. Длинный способ с циклом while
  3. Короткий способ циклом for
  4. Самый быстрый способ
  5. Заключение

Введение

В ходе статьи рассмотрим три вариации кода для определения количества разрядов в ведённом пользователем числе на языке программирования Python.

Длинный способ с циклом while

Дадим пользователю возможность ввести число:

n = int(input('Введите число: '))

Если было введено отрицательное число, нужно его сделать положительным. Для этого добавим его в модуль методом abs():

n = int(input('Введите число: '))
n = abs(n)

Добавим переменную count равную нулю:

n = int(input('Введите число: '))
n = abs(n)

count = 0

Создадим цикл while, который не закончится, пока n > 0. В цикле будем убирать последнюю цифру в переменной n, а к count прибавлять единицу:

n = int(input('Введите число: '))
n = abs(n)

count = 0

while n > 0:
    n //= 10
    count += 1

Осталось вывести результат:

n = int(input('Введите число: '))
n = abs(n)

count = 0

while n > 0:
    n //= 10
    count += 1

print(count)

# Введите число: 164832
# 6

Короткий способ циклом for

Обычно подобным не занимаются при помощи цикла for, но почему бы и нет. Как и в предыдущем способе даём пользователю возможность ввода числа, и добавляем его в модуль. Также создаём переменную count равную нулю:

n = abs(int(input('Введите число: ')))
count = 0

Создадим цикл for, в котором пройдёмся по количеству символов в переменной n. Внутри цикла прибавляем к count единицу:

n = abs(int(input('Введите число: ')))
count = 0

for i in range(len(str(n))):
    count += 1

Выведем результат в консоль:

n = abs(int(input('Введите число: ')))
count = 0

for i in range(len(str(n))):
    count += 1

print(count)

# Введите число: 111
# 3

Самый быстрый способ

Как и в предыдущих способах даём пользователю возможность ввода числа, и добавляем его в модуль:

n = abs(int(input('Введите число: ')))

Теперь в переменную count сохраним длину значения преобразованного в строковый тип данных в переменной n:

n = abs(int(input('Введите число: ')))
count = len(str(n))

Выведем результат:

n = abs(int(input('Введите число: ')))
count = len(str(n))

print(f'В числе {n} находится {count} разрядов.')

# Введите число: 17424312
# В числе 17424312 находится 8 разрядов.

Заключение

В ходе статьи мы с Вами разобрали целых 3 способа определить количество разрядов в числе в Python. Надеюсь Вам понравилась статья, желаю удачи и успехов! 🙂

Admin

Подсчитать количество единиц в данном целом числе

Как вы считаете количество единиц в двоичном представлении данного целого числа.

Скажем, вам дали номер 20, который 10100 в двоичном, поэтому число единиц равно 2.

2013-03-21 06:24

10
ответов

Решение

Используйте удивительный collections модуль.

>>> from collections import Counter
>>> binary = bin(20)[2:]
>>> Counter(binary)
Counter({'0': 3, '1': 2})

Или вы можете использовать встроенную функцию count():

>>> binary = bin(20)[2:]
>>> binary.count('1')
2

Или даже:

>>> sum(1 for i in bin(20)[2:] if i == '1')
2

Но это последнее решение медленнее, чем использование count()

2013-03-21 06:27

То, что вы ищете, называется весом Хэмминга, и для этого есть множество алгоритмов. Вот еще один простой:

def ones(n):
    w = 0
    while (n):
        w += 1
        n &= n - 1
    return w

2013-03-21 06:31

>>> num = 20
>>> bin(num)[2:].count('1')
2

2013-03-21 06:28

Обычный способ сделать это слепым быстро — использовать таблицы поиска:

table = [bin(i)[2:].count('1') for i in range(256)]

def pop_count(n):
   cnt = 0
   while n > 0:
     cnt += table[n & 256]
     n >>= 8
   return cnt

В Python любое решение, использующее bin а также list.count будет быстрее, но это хорошо, если вы хотите написать это на ассемблере.


user9567

21 мар ’13 в 06:37
2013-03-21 06:37

2013-03-21 06:37

В
int Тип имеет новый метод int.bit_count() начиная с python 3.10a, возвращает количество единиц в двоичном раскрытии заданного целого числа, также известного как подсчет населения, как показано ниже:

n = 20
bin(n)
'0b10100'

n.bit_count() возвращается
2 поскольку он имеет 2 единицы в двоичном представлении.

2020-09-19 22:04

Метод str.count и функция bin быстро справляются с этой небольшой задачей:

>>> def ones(x):
        "Count the number of ones in an integer's binary representation"
        return bin(x).count('1')

>>> ones(20)
2

2013-03-21 06:29

Вы можете сделать это, используя битовый сдвиг >> и побитовое и & чтобы проверить младший бит, например:

def count_ones(x):
    result = 0
    while x > 0:
        result += x & 1
        x = x >> 1
    return result

Это работает путем сдвига битов вправо, пока значение не станет равным нулю, подсчитывая, сколько раз наименее значащий бит равен 1 на этом пути.

2020-01-29 19:00

Я новый кодер, и я нашел эту простую логику. Новичкам будет легче понять.

def onesInDecimal(n):
  count = 0
  while(n!=0):
    if (n%2!=0):
        count = count+1
        n = n-1
        n = n/2
    else:
        n = n/2
  return count

2017-06-24 13:22

Для особого случая, когда вам нужно быстро проверить, имеет ли двоичная форма целого числа только одну единицу (и, следовательно, является степенью двойки), вы можете использовать эту проверку:

      if x == -(x | (-x)):
    ...

Выражение
-(x | (-x))это число, которое вы получите, если замените все единицы, кроме последней (самый младший бит) в двоичном представлении
xс 0.

Пример:

12 = 1100 в двоичном формате

-12 = …110100 в двоичном формате (с бесконечным числом ведущих единиц)

12 | (-12)= …111100 в двоичном формате (с бесконечным числом начальных единиц)

-(12 | (-12)) = 100 в двоичном формате

2021-12-27 23:35

Если введенный номер «число»

number =20
len(bin(number)[2:].replace('0',''))

Другое решение

from collections import Counter

Counter(list(bin(number))[2:])['1']

2013-03-21 06:24

Понравилась статья? Поделить с друзьями:
  • 0xc000000f при загрузке windows 10 как исправить winload efi
  • Фабл 3 требует диск как исправить
  • Как найти годовую температуру 6 класс география
  • Как найти имя своей видеокарты
  • Как найти фильмы с высоким рейтингом