#python-2.7 #operators
#python-2.7 #операторы
Вопрос:
str = "hello this is a string"
buffer = map(ord,str) #string to char array
b = (buffer[0]) #i assume this is creating an array of one buffer[0]
fin = b amp; 0x80 #what does this do?
Я не уверен, что b amp; 0x80
делает, я предполагаю, что он добавляет массив b
байтов?
Ответ №1:
Вы правы, что делает большая часть кода:
str = "hello this is a string"
buffer = map(ord,str)
print buffer
Буфер — это список, в котором каждый символ str
изменен на его значение ascii (преобразуются даже пробелы, они имеют значение 32):
[104, 101, 108, 108, 111, 32, 116, 104, 105, 115, 32, 105, 115, 32, 97, 32, 115, 116, 114, 105, 110, 103]
Следующая строка просто устанавливается b
как первый индекс этого списка, поэтому b
это просто int, а не список int. Скобки не имеют значения:
b = (buffer[0])
bb = buffer[0]
print b,bb #prints: 104 104
Это amp;
побитовый оператор «и», который работает, принимая два числа и возвращая новое число с битами только для перекрывающихся битов. Двоичный файл 104
равен:
print("{0:b}".format(104))
'01101000'
Шестнадцатеричный 0x80
, для 128
которого есть двоичная строка '10000000'
. Итак amp;
, 104 и 128 — это столбцы, в которых оба числа, записанные в двоичном формате, имеют a 1
, которое, оказывается, равно none, поэтому результат равен нулю:
'01101000'
'10000000'
--------
'00000000'
Вот пример между 128
и 129
, который приводит к ответу 128
:
'10000000'
'10000001'
--------
'10000000'