Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504

Разделить число на биты и сохранить их в массив

12.09.2023, 17:11. Показов 2600. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вопрос глупый, но тем не менее не могу сообразить
есть большое число мне нужно его разбить на биты, которые поместить в массив numpy.
например есть число в десятичной системе 195, в двоичной будет 0b11000011, т.е. мне нужно из числа 195 получить массив [1,1,0,0,0,0,1,1], самый простой способ что я придумал это превратить двоичное представление в строку, которую потом разбить на биты и всё это отправить в массив.
но это как то топорно и грубо, при больших числах, с которыми мне нужно работать (512 бит и выше) скорее всего такой метод будет потреблять много ресурсов, да и времени
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.09.2023, 17:11
Ответы с готовыми решениями:

Ввести целое число A. Инвертировать все биты с 4 по 8, включая эти биты. Вывести результат
нужна помощь в битовых операциях.Ввести целое число A. Инвертировать все биты с 4 по 8, включая эти биты. Вывести результат.

Ввести целое число A. Инвертировать все биты со 2 по 14, включая эти биты. Вывести результат
Помогите, сколько не пробовал, не получается. Ввести целое число A. Инвертировать все биты со 2 по 14, включая эти биты. Вывести результат.

Разделить старшие и младшие биты в переменной
Объясните дураку работу с битовыми операциями... Есть у меня массив, где первый элемент это 32 младших бита, а второй - 32 старших ...

10
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
12.09.2023, 17:54
kelod,
Python
1
2
3
4
5
6
7
8
9
n = 195
a = []
 
while n:
    a.append(n % 2)
    n //= 2
    
a.reverse()
print(a)
Code
1
2
3
4
5
[1, 1, 0, 0, 0, 1, 0, 0]
 
 
** Process exited - Return Code: 0 **
Press Enter to exit terminal
Добавлено через 4 минуты
kelod, Ну или через bin как вы и хотели.
Python
1
2
3
n = 195
a = [int(i) for i in bin(n)[2:]]
print(a)
2
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
12.09.2023, 18:06
anton78spb, ну или так:
Python
1
2
3
4
n = 195
a = list(bin(n)[2:])
print(a)
#[1, 1, 0, 0, 0, 0, 1, 1]
2
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
12.09.2023, 19:52
idealist, Нет, не сработает данный вариант. Получится список строк.
Code
1
['1', '1', '0', '0', '0', '0', '1', '1']
Добавлено через 1 минуту
Вот так еще можно.
Python
1
2
3
n = 195
a = list(map(int, bin(n)[2:]))
print(a)
2
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
12.09.2023, 19:55  [ТС]
anton78spb, idealist, спасибо, все варианты рабочие, но с while самый быстрый, его наверное и буду использовать
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
12.09.2023, 20:28
Цитата Сообщение от kelod Посмотреть сообщение
while самый быстрый
Ну или так:
Python
1
2
3
4
5
6
7
8
n = 195
a = []
 
while n:
    n, rem = divmod(n, 2)
    a.append(rem)
a.reverse()
print(a)
Добавлено через 1 минуту
Цитата Сообщение от anton78spb Посмотреть сообщение
Получится список строк.
А, да, тут что-то я погорячился.
0
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
12.09.2023, 21:56  [ТС]
я тут подумал, что бы уже вопрос закрыть полностью, а как сделать обратное преобразование? т.е. из массива бит получить число
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
12.09.2023, 22:20
Цитата Сообщение от kelod Посмотреть сообщение
в массив numpy
Эээээ
Python
1
2
3
4
5
6
7
8
import numpy as np
 
x = 195
 
y = np.unpackbits(np.array([x], dtype=np.uint8))
print(y) # [1 1 0 0 0 0 1 1]
z = np.packbits(y)
print(z) # [195]
4
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
12.09.2023, 22:25
Цитата Сообщение от kelod Посмотреть сообщение
а как сделать обратное преобразование? т.е. из массива бит получить число
Ну, так можно:
Python
1
2
3
arr = [1, 1, 0, 0, 0, 0, 1, 1]
n = int(''.join([str(k) for k in arr]), 2)
print(n)
1
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
12.09.2023, 22:31  [ТС]
iSmokeJC, этот вариант не пойдет, так как он не работает с большими числами, а для меня как раз важно что бы можно было бы в нумпай большие числа записывать, длинной 512 бит и более иначе и огород городить не нужно было бы
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
12.09.2023, 22:45
Ну или так:
Python
1
2
3
4
arr = [1, 1, 0, 0, 0, 0, 1, 1]
from functools import  reduce
n = reduce(lambda a,b: a * 2 + b, arr)
print(n)
Или так:
Python
1
2
3
4
arr = [1, 1, 0, 0, 0, 0, 1, 1]
from functools import  reduce
n = reduce(lambda a,b: (a << 1) + b, arr)
print(n)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.09.2023, 22:45
Помогаю со студенческими работами здесь

Число разделить на 5 и остаток записать в массив
Нужно число делить на 5 и остачу записывать в массив(начиная с первой остачи). Пример 121:5-1 4 4. вот мой цыкл: #include...

Разделить целое число на цифры и поместить в массив
Случайное число от 0 до MAX_int, например 2415673, нужно разделить на цифры и поместить в массив по отдельности. Количество цифр в числе...

Создать массив, разделить каждый его элемент на определенное число
У меня такая проблема, у меня номиналы 5, 10, 50 и 100. Мне нужно, чтобы каждый из этих номиналов, а их число может быть до 50000...

Как разделить одномерный массив на несколько массивов, если разделителем является какое-либо число из массива?
Есть, допустим, такой массив: . Нужно разделить его на несколько массивов, где 0 является разделителем. Получится должно так: .

Дан массив. Все элементы, не превышающие число 100. Сохранить в очередь
Дан массив. Все элементы, не превышающие число 100. Сохранить в очередь. Класс Queue


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru