Cours 4 : Processeurs, Représentation des entiers/flottants
Jeu d’instruction Intel x86
Pourquoi x86 ?
- Avant : 8088 : registres de 8 bits, adressage de 16 bits
- Puis : 8086 : mélange de 8 et 16 bits
- Puis : 80286 : rajout d’un hôte protégé (administrateur), et 802386, 80234586, …
À chaque étape : rétro-compatibilité (⟹ complique largement le format binaire).
- AL/AH : L=low, H=high
#include <stdio.h>
int main()
{
printf("char : %ld octets", sizeof(long int))
}
NB :
- signed :
0xff = 0xfffff... - unsigned :
0xff = 0x0....0ff
NB : mêmes opérations pour signed et unsigned (x+(-x)=0 est vrai), donc l’interprétation “signed/unsigned” est purement humaine : l’ordi les manipule avec les mêmes opérations.
a = 010111{.C}
Décalage logique (on complète par des 0):
a>>1{.C} (a ⟵ 0a)
a<<1{.C} (a ⟵ a0)
VS :
- décalage arithmétique : on garde le signe :
a>>1{.C} (a ⟵1a) si a négatifa>>1{.C} (a ⟵0a) si a positif
cf. https://www.h-schmidt.net/FloatConverter/IEEE754.html
Pour la finance : on n’utilise pas des floats, mais des entiers et on ajuste l’affichage (plus sûr que pour les floats : erreurs d’arrondis)
2.5 = 1.25.2^1 = 0 1000000 010... (bit de signe + “exposant + 127” + “partie décimale -1” )
0.75 = 1.5.2^-1 = 1 0111110 10000...
NB :
- addition des mantisses : on garde le plus grand exposant (ici : on divise par 4 la mantisse faible, pour augmenter son exposant de deux).
m_x = 1 0100... m_y = 1 1000... ⇓ m_x = 1 0100... m_y = 0 011000... _______________ m_z = 1 1010....
Mais
- si il n’y a pas de plus grand exposant : on répercute ça sur l’exposant.
- si exposant(m_x)»exposant(m_y), de telle sorte qu’on décale m_y de plus de 23 bits : alors $m_x+m_y ≃m_x$ : $m_x$ reste inchangée.
wchar = UTF-32
-
mbstowcs: multi-byte string to wide character stringMAIS : il faut d’abord mettre le bon
locale(dans vim :set_locale)Convertir autre codage vers
wchar: d’abord utilisersetlocale -
wcstombs: fait l’inverse -
iconv: plus souple, mais plus compliqué à utiliser -
wcslen: compter le nb de caractère -
wprintf: commeprintf, mais en entrée, le modèle doit être donné comme unwchar- ex:
"%s":printfva attendre un argument de typechar "%ls":wchar
- ex:
Leave a comment