Qué significa y significa en Python

Hola me encontré con el siguiente código

numdigits = len(cardNumber) oddeven = numdigits & 1 

¿Qué está pasando aquí? No estoy seguro de lo que está haciendo el “&”.

Responder

El símbolo & es un operador AND a nivel de bit. Usado con 1, básicamente enmascara el valor para extraer el bit más bajo, o en otras palabras le dirá si el valor es par o impar.

Más información sobre Python’s & operator

Para obtener más información, consulte: http://wiki.python.org/moin/BitwiseOperators

¿Por qué funciona para verificar Odd vs. Even?

EDITAR: Agregar esta sección ya que esta respuesta está recibiendo un poco de amor

La razón por la que ANDing un valor con 1 indica si el valor es impar o incluso puede no ser obvio al principio.

La representación binaria de un número es esencialmente la sum de una serie de SÍ o NO para cada potencia de 2 moviéndose hacia la izquierda en el dígito más a la derecha con 1, 2, 4, 8, …

Sólo hay una manera de representar cualquier número de esta manera. Por ejemplo, el número 13 (base 10) se puede escribir en binario como “1101” (o hexadecimal como 0xD, pero eso no es el punto). Mira aquí:

  1 1 0 1 xxxx 8 4 2 1 = = = = 8 + 4 + 0 + 1 = 13 

Observe que, aparte del dígito binario más a la derecha, todos los otros 1 dígitos agregarán un número par (es decir, un múltiplo de 2) a la sum. Entonces, la única manera de obtener una sum final impar es sumr ese 1 impar del dígito más a la derecha. Entonces, si tenemos curiosidad si un número es impar o par, podemos observar su representación binaria e ignorar todo excepto el dígito más a la derecha.

Para ello, utilizamos el operador bitwise AND. El valor 1 en binario se expresa como 1 :

  0 0 0 1 xxxx 8 4 2 1 = = = = 0 + 0 + 0 + 1 = 1 

ANDAR un valor con 1 como este dará como resultado 1 si se establece el bit más a la derecha del valor, y 0 si no lo está.

Y como 0 general se considera “falso” en la mayoría de los idiomas, y los valores que no son cero se consideran “verdaderos”, podemos decir simplemente como un atajo:

 if (value & 1): do_something_with_odd_value()... 

Además, & también se usa para tomar la intersección de dos conjuntos de Python :

 set1 = {0,1,2,3} set2 = {2,3,4,5} print(set1 & set2) >>>set([2, 3]) 

Es una operación a nivel de bits, en este caso, se asigna cero a un oddeven si cardNumber tiene un número par de elementos (y uno de otro modo).

Como ejemplo: supongamos que len(cardNumber) == 235 . Luego numdigits == 235 , que es 0b11101011 en binario. Ahora 1 es '0b00000001' en binario, y cuando los '0b00000001' “, a nivel de bits, obtendrás:

  11101011 & 00000001 ---------- = 00000001 

De manera similar, si los numdigits fueran 234, obtendrías:

  11101010 & 00000001 ---------- = 00000000 

Por lo tanto, es básicamente una forma len(cardNumber) % 2 de comprobar si len(cardNumber) % 2 . Probablemente escrito por alguien con un fondo en C, porque no es muy python – ¡la legibilidad cuenta!

& es un bit y , que es una forma eficiente de hacer cálculos a nivel de bit. Está tomando numdigits y, a continuación, con 1 , bit a bit.

Es un operador binario en modo bit y operador .