Найти - Пользователи
Полная версия: Размер переменной
Начало » Python для новичков » Размер переменной
1
zvyozdo4ka
Как можно узнать размер переменной? Есть готовая функция? На самом деле, надо у переменной выделить 672 битов, но для начала узнать бы ее длину.

С уважением, Zvyozdo4ka.
JOHN_16
OMG. Откуда вы такое взяли?
672 бита, это 84 байта. Мне кажется вы либо говорите не имея понятия о чем, либо имеете ввиду нечто совсем другое.
Огласите полностью вашу задачу
zvyozdo4ka
Задача из области криптографии. На самом деле, я начинала писать на С, но в С есть ограничение на размер переменной, а массивы для больших переменных писать, да еще умножения этих массивов - лень. Поэтому было решено воспользоваться Python для процедуры с большими числами. В общем, производятся операции над числами длиной от 256 бит, а потом от результата надо взять 672 бит слева. И эта последняя задача просто взрывает мозг. Подскажите, пожалуйста, как это сделать?
Singularity
Реверс и остаток от деления на 2^672 ?
zvyozdo4ka

Singularity
Реверс и остаток от деления на 2^672 ?

Для реверса нету готовой функции?

Т.е., если мне надо взять, например 10 битов справа, то просто беру остаток от деления на 2^10?
py.user.next
>>> n = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
>>> b = n & ~(~0 << 10)
>>> b
682
>>> bin(b)
'0b1010101010'
>>>
взятие десяти младших бит


>>> n = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
>>> n.bit_length()
180
>>> n = n << 180 | n
>>> n.bit_length()
360
>>> hex(n)
'0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
>>> b = n & ~(~0 << 300)
>>> bin(b)
'0b101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010'
>>>
удлиннение числа в два раза и взятие трёхсот младших бит


zvyozdo4ka
а потом от результата надо взять 672 бит слева
>>> n = 0xbbb
>>> bin(n)
'0b101110111011'
>>> b = (n >> (n.bit_length() - 3)) & ~(~0 << 3)
>>> bin(b)
'0b101'
>>>
взятие трёх старших бит
zvyozdo4ka
Большое спасибо за помощь. Теперь все работает.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB