CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Je viens de découvrir l'algorithmique...

Lagrangien
Lagrangien
Niveau 8
17 septembre 2012 à 22:16:44

Et je me pose une question.
Y a-t-il des langages qui permettent déclarer, en même temps qu'une variable, le nombre de bits dont on a besoin pour la stocker ?

Par exemple, si je sais que je vais traiter un nombre N qui, pour des raisons de logique externe au programme, ne prendra jamais d'autres valeurs que 0,1,2,3, alors je fais une déclaration du style :

variable-à-2-bits N

Puisque 2 * 2 = 4 = nombre de valeurs différentes que peu prendre N.

Un programme dans un tel langage serait ultra optimisé au niveau de la place affectée à chaque variable, non ?

Ou alors je suis débile ? Je suis débutant hein ...

caelacanthe
caelacanthe
Niveau 10
17 septembre 2012 à 22:19:10

je crois avoir vaguement vu ça en C, mais c'est probablement très peu utilisé... et puis, c'est pas comme si le système allait te refiler 2 bits comme ça, c'est 8 l'unité de base. à toi de coder un tel conteneur, au pire, il prendrait au moins 8 bits mais l'intérêt est de parvenir à les gérer indépendamment. :oui:

Lagrangien
Lagrangien
Niveau 8
17 septembre 2012 à 22:21:58

Mais justement, on est à tout jamais cantonné à l'utilisation de paquets de 8 bits donc? Pas moyen d'allouer moins ? Donc quand je déclare un boolean, il va prendre un octet, alors qu'il tiendrait dans 1 bit ???

caelacanthe
caelacanthe
Niveau 10
17 septembre 2012 à 22:24:36

"Mais justement, on est à tout jamais cantonné à l'utilisation de paquets de 8 bits donc? Pas moyen d'allouer moins ? Donc quand je déclare un boolean, il va prendre un octet, alors qu'il tiendrait dans 1 bit ???"

:d) oui. non. oui. :oui:

mais le "non" est relatif, tu peux mettre 8 booléens sur un octet, en gérant toi-même les bits qu'il contient. :(

Lagrangien
Lagrangien
Niveau 8
17 septembre 2012 à 23:22:07

:ouch: Mon monde s'effondre :-(

Mjonir
Mjonir
Niveau 26
18 septembre 2012 à 00:25:17

La restriction au byte est essentiellement hardware, et pas software. Par contre, même si tu es obligé d'allouer minimum 8 bits, ça ne veut pas dire que tu ne peux pas aller stocker plusieurs infos dedans.

Ce lien (premier résultat Google) propose une solution élégante: http://www.cplusplus.com/forum/general/51911/

Avec du C++, tu pourrais franchement faire une jolie couche d'abstraction et venir allouer exactement la place que tu veux comme si de rien n'était, exactement ce que tu demande.

Par contre comme signalé ça a un coup, coté performance ça va morfler. C'est le tradeoff espace mémoire/performance qu'il faut faire en permanence... gaspiller quelques bits est rarement important du moment que ça aille vite. De nos jours la mémoire c'est pas cher et on l'étend comme on veut. La vitesse du CPU, c'est moins évident.

godrik
godrik
Niveau 30
18 septembre 2012 à 03:31:26

En vrai ce n'est pas tant un probleme de langage qu'un probleme materiel. Dans certain materiel on ne peut rien allouer d'autre que des mots processeurs. Ca ne veut pas dire que tu ne peux pas encoder plusieurs informations dans un mot processeur. Mais c'est du boulot a faire en software.

Nightmarez
Nightmarez
Niveau 9
18 septembre 2012 à 12:36:29

Ce que tu cherches s'appelle les "Champs de bits" en C/C++, et servent a allouer des fractions de type scalaire. Par exemple, en faisant:

int a:5;

Tu auras ta variable a qui fera virtuellement 5 bits, bien qu' au final elle requiert un int. La subtilite vient au moment ou tu as plusieurs champs de bits. Le compilateur va subdiviser les variables de meme types dans les tailles que tu lui demandes, par exemple :

int a:5;
int b:8;
int c:3;

Les trois variables seront stockees sur le meme int en memoire pour gagner de la place, mais feront bel et bien les tailles demandees. Attention par contre, je ne suis pas sur que le compilateur (gcc de memoire) te previenne si jamais il y'a overflow. Dans le cas d'un overflow (par exemple, si les variables sont alignees dans l'ordre a puis b puis c) de la variable a, la valeur de la variable b sera changee.

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment