Форум сайта python.su
0
Всем привет :)
Работаю с bytes, map-ю их. Вопрос в том, как сделать так, что-бы в результате арифметических операций, полученное число было-бы в диапазоне ?
Примеры:
230 + 90 = 64
5 - 7 = 254
255 + 1 = 0
в других языках есть функция byte(), а в Python?
Офлайн
0
230 + 90 [b]% 256[/b] = 64
5 - 7 [b]% 256[/b] = 254
255 + 1 [b]% 256[/b] = 0
def byte(x):
return x % 256
Отредактировано (Авг. 5, 2011 07:47:57)
Офлайн
0
Ок, спасибо
Офлайн
253
еще вариант - numpy.array(,dtype='b') - это лучше если будете работать с массивами байтов
Офлайн
7
Для получения младшего байта надо использовать побитовое AND c маской 0xff:
>>> 230+90 & 0xff
>>> 64
>>> 5-7 & 0xff
>>> 254
>>> 255+1 & 255
>>> 0
Отредактировано (Авг. 7, 2011 13:29:37)
Офлайн
0
Isemнаверное это самый лучший вариант. Даже по определению
Для получения младшего байта надо использовать побитовое AND c маской 0xff:>>> 230+90 & 0xff
>>> 64
>>> 5-7 & 0xff
>>> 254
>>> 255+1 & 255
>>> 0
Офлайн
7
atomAlteraВсе дело в представлении числа на выходе. Питон дает беззнаковое число, а калькулятор - знаковое. Другими словами -4 и 252 - это одно и то же если и то и другое представить в виде 8-ми бит: 11111100, только его по разному можно интерпретировать.
а вот почему -4 % 256 в пайтоне 252 а на калькуляторе -4 понять не могу. % - это же деление по модулю?
Отредактировано (Авг. 9, 2011 03:56:11)
Офлайн