0

Je suis un débutant en Python et j'ai un problème avec le stockage d'informations. J'ai une tâche de mon «mentor» et je ne sais pas comment faire. J'ai un tableau avec les nombres 0 et 1, par ex. Je sais que ce sont des entiers, mais il a dit que je devrais le garder sous forme de bits. J'ai essayé de convertir ma variable au numéro par exemple:Optimisation - comment stocker des "bits" en mémoire?

a = 14 puis ab = bin(14).

Mais quand je sers sys.getsizeof() ab est plus grand qu'un. J'essayais d'utiliser bytearray() mais je ne le comprends pas non plus. Je pensais savoir comment fonctionne un ordinateur, mais cela me rend confus.

Comment conserver les bits? Que devrais-je utiliser? Que devrais-je lire pour le comprendre? et comment mesurer la taille de ma variable (sys.getsizeof() est correct pour cela? Ou dois-je l'écrire dans un fichier binaire?). Nous le faisons pour optimiser la mémoire.

+1

Vous n'avez pas besoin de convertir le nombre en bits littéraux. Je pense que ce que votre professeur voulait dire, c'est que vous deviez laisser les nombres représenter des bits et utiliser des opérations sur les bits. Et si vous avez besoin d'afficher les nombres en binaire, vous pouvez juste convertir chaque entier du tableau en sa représentation binaire en utilisant 'bin()'. –

+0

Son intéressant, mais je pars du tableau des nombres 0 et 1 et il a dit que je devrais le stocker sous forme de bits. Après cela, je devrais lire "un mot machine" à la mémoire. C'est trop fou pour moi ... – Queen

+0

Quelle est exactement sa définition d'un "mot machine"? Les différents ordinateurs ont différentes tailles de mots. Avez-vous donné une valeur spécifique comme 4 bits ou 8 bits? Et comment exactement veut-il que les nombres soient stockés en tant que bits? Veut-il les convertir à leur représentation bit? Veut-il les écrire dans un fichier binaire? Ce que je vous recommande de faire est de rencontrer votre professeur et discuter de vos questions avec lui/elle. Ils seront en mesure de vous dire exactement ce qu'ils recherchent. –

Répondre

2

Je ne suis pas sûr que je comprends le but, mais voici une supposition:

def convert(bits): 
    val = 0 
    for bit in bits: 
     val = (val << 1) | bit 
    return val 

a = [1, 1, 1, 0] 
ab = convert(a) 
print(ab, bin(ab)) # -> 14 0b1110 

Le résultat stocké dans ab est un entier Python, qui ont des longueurs variables selon le nombre de bits sont nécessaires pour maintenir le nombre. Le code ci-dessus gérera n'importe quel nombre de bits (mais vous pourriez y mettre une limite).