Depuis les débuts de l'informatique, et en particulier les travaux de Von Neumann (qui a retenu notamment qu'on pouvait mettre dans une mémoire binaire, indifféremment des nombres, des caractères, des instructions), les constructeurs ont choisi leurs modes de représentation, de manière arbitraire, mais on peut espérer qu'ils ont réfléchi aux implications de leur choix quant aux circuits électroniques nécessaires pour traiter les données. La base adoptée par la plupart a été finalement l'octet, utilisé seul (pour stocker un caractère), par 2 (entier court, ou instruction RR, permettant des opérations de registre à registre, parmi les 16 registres), par 4 (entier long, flottant simple précision, ou instruction avec adresse mémoire), par 6 (instruction), par 8 (flottant double précision) [cas des machines IBM]
D'autres constructeurs ont choisi une représentation sur 6 bits (= 1 caractère) et des "mots" de 36 bits.
C'est donc le compilateur qui "décide" du type d'information se trouvant à telle adresse, mais comme c'est lui qui les range, il n'a pas de problème pour les retrouver. Les problèmes d'incompatibilité ... peuvent venir du programmeur (surtout avec les sous-programmes).
Les compilateurs peuvent donc mélanger des instructions et des données, pour des programmes écrits en assembleur par exemple. Pour les langages évolués, le compilateur choisira de séparer les instructions des données. Cette stratégie permet de protéger le code (éviter d'écraser les instructions). Elle permet aussi d'utiliser le même code pour plusieurs exécutions en simultané, chaque process ayant ses propres données, son compteur ordinal, ses codes d'état.
Pour la représentation des flottants, la caractéristique (exposant + signe de l'exposant + signe du nombre), les signes ne pouvant que "+" ou "-", il suffit d'un bit pour les coder. Avec "0" pour les nombres positifs, qui ont alors une représentation "naturelle" (cf les nombres "non signés). La "norme" (toujours IBM) a longtemps été de coder la caractéristique sur 8 bits, ce qui facilitait les conversions simple/double précision. La norme IEEE utilise des tailles différentes selon la simple/double précision. De même, certains ont choisi une représentation en base 16, d'autres une base 2, avec la "normalisation" ad'hoc.
La mantisse (les chiffres significatifs) occupent tous les bits restants, sur les 32 ou 64 prévus. Pour les nombres négatifs, certains constructeurs ont pu choisir de prendre l'inverse (complément à 2) de tous les bits (caractéristique et mantisse).
Pour ne pas perdre de précision (comme dans le cas du "2,3" vu plus haut), la représentation à adopter doit être du type "virgule flottante", où les chiffres sont en "décimal codé binaire" et la position de la virgule fixée par convention, ou dans une variable annexe. (cf le Cobol )