что происходит с этим массивом символов python

#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'