listview addFooterView проблемы

Побитовые операторы - это операторы, которые работают с несколькими битовыми значениями, но концептуально по одному бит за раз.

  • AND равно 1, только если как входы 1, в противном случае - 0.
  • OR равно 1, если один или оба его входов равны 1, в противном случае это 0.
  • XOR равно 1, только если ровно один его входов равен 1, в противном случае оно равно 0.
  • NOT равно 1, только если его вход равен 0, в противном случае это 0.

Их часто можно лучше всего показать как таблицы истинности. Входные возможности находятся сверху и слева, результирующий бит является одним из четырех (два в случае NOT, поскольку он имеет только один вход), показанных на пересечении входов.

AND | 0 1     OR | 0 1     XOR | 0 1    NOT | 0 1
----+-----    ---+----     ----+----    ----+----
 0  | 0 0      0 | 0 1       0 | 0 1        | 1 0
 1  | 0 1      1 | 1 1       1 | 1 0

Например, если вы хотите только младшие 4 бита целого числа, вы И его с 15 (двоичный код 1111), так:

    201: 1100 1001
AND  15: 0000 1111
------------------
 IS   9  0000 1001

Нулевые биты в 15 в этом случае эффективно действуют как фильтр, заставляя биты в результате также иметь нуль.

Кроме того, >> и << часто включаются как побитовые операторы, и они «сдвигают» значение соответственно справа и слева от определенного количество бит, отбрасывание битов, которые катят конец, на который вы смещаетесь, и подача нулевых бит на другом конце.

Итак, например:

1001 0101 >> 2 gives 0010 0101
1111 1111 << 4 gives 1111 0000

Обратите внимание, что сдвиг влево в Python необычен тем, что он не использует фиксированную ширину, где биты отбрасываются, - хотя многие языки используют фиксированную ширину на основе типа данных, Python просто расширяет ширину, чтобы обслуживать дополнительные биты. Чтобы получить отбрасывающее поведение в Python, вы можете следовать сдвигу влево с поразрядным and, например, в 8-битном значении, сдвигающем влево четыре бита:

bits8 = (bits8 << 4) & 255

Учитывая это, другой пример побитовых операторов - если у вас есть два 4-битных значения, которые вы хотите упаковать в 8-разрядный, вы можете использовать все три из ваших операторов (left-shift, and и or):

packed_val = ((val1 & 15) << 4) | (val2 & 15)
  • Операция & 15 будет обеспечивать, чтобы оба значения имели только младшие 4 бит.
  • << 4 - это 4-битный сдвиг влево для перемещения val1 в верхние 4 бита 8-битного значения.
  • | просто объединяет эти два вместе.

Если val1 равно 7 и val2 равно 4:

                val1            val2
                ====            ====
 & 15 (and)   xxxx-0111       xxxx-0100  & 15
 << 4 (left)  0111-0000           |
                  |               |
                  +-------+-------+
                          |
| (or)                0111-0100
14
задан slim 18 October 2010 в 20:28
поделиться