tipos pasar numeros listas letras len imprimir float convertir python integer unsigned signed

pasar - Cómo convertir firmado a entero sin signo en python



pasar de float a int python (3)

Digamos que tengo este número i = -6884376 . ¿Cómo me refiero a una variable sin signo? Algo así como (unsigned long)i en C.


Para obtener el valor equivalente a tu conversión de C, solo a nivel de bit y con la máscara adecuada. por ejemplo, si el unsigned long es de 32 bits:

>>> i = -6884376 >>> i & 0xffffffff 4288082920

o si es de 64 bits:

>>> i & 0xffffffffffffffff 18446744073702667240

Tenga en cuenta que aunque eso le da el valor que tendría en C, sigue siendo un valor con signo, por lo que cualquier cálculo posterior puede dar un resultado negativo y tendrá que continuar aplicando la máscara para simular un 32 o 64 cálculo de bit


Python no tiene tipos incorporados sin firmar. Puede usar operaciones matemáticas para calcular una nueva int que represente el valor que obtendría en C, pero no hay un "valor sin signo" de una int de Python. Python int es una abstracción de un valor entero, no un acceso directo a un entero de tamaño de byte fijo.


Asumiendo :

  1. Tienes representaciones complementarias de 2 en mente; y,
  2. Por (unsigned long) te refieres entero sin signo de 32 bits,

entonces solo necesita agregar 2**32 (or 1 << 32) al valor negativo.

Por ejemplo, aplique esto a -1:

>>> -1 -1 >>> _ + 2**32 4294967295L >>> bin(_) ''0b11111111111111111111111111111111''

La suposición n. ° 1 significa que quiere que -1 sea visto como una cadena sólida de 1 bit, y la suposición n. ° 2 significa que quiere 32 de ellos.

Sin embargo, nadie más que tú puedes decir cuáles son tus suposiciones ocultas. Si, por ejemplo, tiene representaciones de complemento de 1 en mente, entonces necesita aplicar el operador de ~ prefijo en su lugar. Los enteros de Python trabajan duro para dar la ilusión de usar una representación infinitamente amplia de complemento de 2 (como el complemento 2 normal, pero con un número infinito de "bits de signo").

Y para duplicar lo que hace el compilador de la plataforma C, puede usar el módulo ctypes :

>>> import ctypes >>> ctypes.c_ulong(-1) # stuff Python''s -1 into a C unsigned long c_ulong(4294967295L) >>> _.value 4294967295L

La unsigned long de C pasa a ser 4 bytes en el cuadro que ejecutó esta muestra.