Уведомления

Группа в Telegram: @pythonsu

#1 Март 5, 2013 20:51:05

zvyozdo4ka
От: Ташкент
Зарегистрирован: 2013-03-01
Сообщения: 11
Репутация: +  -1  -
Профиль   Отправить e-mail  

Размер переменной

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

С уважением, Zvyozdo4ka.

Офлайн

#2 Март 6, 2013 00:16:37

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Размер переменной

OMG. Откуда вы такое взяли?
672 бита, это 84 байта. Мне кажется вы либо говорите не имея понятия о чем, либо имеете ввиду нечто совсем другое.
Огласите полностью вашу задачу



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Март 6, 2013 20:09:21

zvyozdo4ka
От: Ташкент
Зарегистрирован: 2013-03-01
Сообщения: 11
Репутация: +  -1  -
Профиль   Отправить e-mail  

Размер переменной

Задача из области криптографии. На самом деле, я начинала писать на С, но в С есть ограничение на размер переменной, а массивы для больших переменных писать, да еще умножения этих массивов - лень. Поэтому было решено воспользоваться Python для процедуры с большими числами. В общем, производятся операции над числами длиной от 256 бит, а потом от результата надо взять 672 бит слева. И эта последняя задача просто взрывает мозг. Подскажите, пожалуйста, как это сделать?

Офлайн

#4 Март 6, 2013 21:32:25

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Размер переменной

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

Отредактировано Singularity (Март 6, 2013 21:38:01)

Офлайн

#5 Март 6, 2013 22:06:52

zvyozdo4ka
От: Ташкент
Зарегистрирован: 2013-03-01
Сообщения: 11
Репутация: +  -1  -
Профиль   Отправить e-mail  

Размер переменной


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

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

Т.е., если мне надо взять, например 10 битов справа, то просто беру остаток от деления на 2^10?

Отредактировано zvyozdo4ka (Март 6, 2013 22:09:32)

Офлайн

#6 Март 7, 2013 00:38:00

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Размер переменной

>>> 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'
>>>
взятие трёх старших бит



Отредактировано py.user.next (Март 7, 2013 00:49:29)

Офлайн

#7 Март 14, 2013 20:29:09

zvyozdo4ka
От: Ташкент
Зарегистрирован: 2013-03-01
Сообщения: 11
Репутация: +  -1  -
Профиль   Отправить e-mail  

Размер переменной

Большое спасибо за помощь. Теперь все работает.

Отредактировано zvyozdo4ka (Март 14, 2013 21:11:00)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version