Catherine Recanati
Plan général
Représentation des nombres. Notion de variable.
Programme. Expressions.
Architecture des ordinateurs: langage machine, langage assembleur, AMIL.
Systèmes d’exploitation : fichiers, processus, compilation.
Instructions de contrôle: boucles et branchements.
Programme, définition de fonction, appel fonctionnel.
Tableaux de variables et fonctions d’arguments de type tableau.
Sens d’un programme, pile d’exécution, compilation.
Pointeurs et tableaux.
Chaines de caractères, bibliothèque <string.h>.
Allocation dynamique, liste chaînées.
Révisions.
2
-‐ Cours 1 -‐
Représenta0on des nombres No0on de variable
Codage binaire des entiers
Codage hexadécimal
Notion de variable
Types de variables
3
Représenta.on des en.ers
En base 10 (décimale), on utilise 10 chiffres:
0,1,2,...6,7,8 et 9.
Ainsi, si n = 17, on aura Rep
10(n) = 17, car n = 1 x 10
1+ 7 x 10
0
En base 2 (binaire), on n’utilise que 2
chiffres: 0 et 1. La décomposition de n en somme de puissances de 2
n = 1 x 2
3+ 0 x 2
2+ 0 x 2
1+ 1 x 2
0fournit Rep
2(n) = 1001.
4
Codage binaire des entiers Codage
hexadécimal Notion de variable Types
de variables
Plan
Codage binaire des en.ers
Ainsi, en binaire:
1 s’écrit 1 1x2
02 s’écrit 10 1x2
1+0x2
03 s’écrit 11 1x2
1+1x2
04 s’écrit 100 1x2
2+0x2
1+0x2
05 s’écrit 101 1x2
2+0x2
1+1x2
06 s’écrit 110 1x2
2+1x2
1+0x2
0etc.
Codage binaire des entiers Codage
hexadécimal Notion de variable Types
de variables
Plan
Codage binaire des en.ers
1 s’écrit 1 2 s’écrit 10 2 2 -1 s’écrit 11
2 2 s’écrit 100
2 3 -1 s’écrit 111 2 3 s’écrit 1000
... ... ...
2 n -1 s’écrit 111... ...11 (n chiffres 1) 2 n s’écrit 100... ...00 (un 1 + n zéros)
Codage binaire des entiers Codage
hexadécimal Notion de variable Types
de variables
Plan
Décimal è Binaire
Pour trouver la représentation binaire d’un nombre, il faut le décomposer en somme de puissances de 2.
Il est donc intéressant de connaitre un peu la liste des puissances de 2:
1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, ..., 16 384, ..., 65 536, etc.
Codage binaire des entiers Codage
hexadécimal Notion de variable Types
de variables
Plan
L’addi.on en binaire
1 + 1 = 10 10 + 1 = 11 11 + 1 = 100
1011 + 11
--- 1110
8
Codage binaire des entiers Codage
hexadécimal Notion de variable Types
de variables
Plan
« 1 + 1 = 10, je pose 0 et je retiens 1.
1+ 1 +1 = 11, je pose 1 et je retiens 1.
0 + 1= 1, je pose 1
et j’abaisse le 1 »
Codage hexadécimal
On utilise 16 caractères : les dix premiers chiffres 0,1,2,...6,7,8,9 et les six premières lettres : A, B, C, D, E, F. Ainsi A désigne 10, et F désigne 15.
ex: FFFF désigne le nombre 65 535.
Si n = 17, la décomposition de n en somme de puissances de 16
n = 1x 16
1+ 1x 16
0nous donne sa représentation hexadécimale
Rep
16(n) = 11
9
Codage binaire des entiers Codage
hexadécimal Notion de variable Types
de variables
Plan
Codage hexadécimal
Inversement, pour convertir en décimal une représentation hexadécimale, on
calculera la somme des puissances de 16 correspondant aux différents coefficients hexadécimaux.
Ex: Rep
16(n) = AF2B.
n = Ax16
3+ Fx16
2+ 2x16
1+ Bx16
0
=10x4096 + 15x256 + 2x16 + 11x1 = 40 960 + 3 840 + 32 + 11
= 44 843
10
Codage binaire des entiers Codage
hexadécimal Notion de variable Types
de variables
Plan
Binaire è Hexadécimal
Pour convertir une représentation binaire en hexadécimale, il suffit de considérer les digits (0 ou 1) par paquet de 4, et de les
convertir en digits hexadécimaux :
Ex: Rep
2(n) = 111100101110010010
Rep
2(n) = 11 1100 1011 1001 0010
3 12 11 9 2 3 C B 9 2 Rep
16(n) = 3CB92
11
Codage binaire des entiers Codage
hexadécimal Notion de variable Types
de variables
Plan
Hexadécimal è Binaire
On transformera chaque digit hexadécimal par son code binaire (sur 4 bits) pour
obtenir la représentation binaire d’un nombre à partir de sa représentation hexadécimale.
Ex: Rep
16(n) = FF2A
Rep
16(n) = F F 2 A Rep
2(n ) = 1111 1111 0010 1010
car Rep
2(F) = 1111, Rep
2(2) = 0010 et Rep
2(A) = 1010
12
Codage binaire des entiers Codage
hexadécimal Notion de variable Types
de variables
Plan
Mémoire
13
Codage binaire des entiers
Codage
hexadécimal Notion de variable
Types
de variables
Plan
La mémoire d’un ordinateur est
constituée d’unités élémentaires, les bits.
Un bit (de binary unit) vaut 0 ou 1 . Un ensemble de 8 bits consécutifs s’appelle un octet.
Le byte est la plus petite unité de mémoire adressable (souvent 8 bits).
No.on de variable
14
Codage binaire des entiers
Codage
hexadécimal Notion de variable
Types
de variables
Plan
Une variable est une « case » ou zone mémoire dont on connait
l’adresse de début et l’étendue (sa taille en nb de bytes).
case n° 3
01111111 00000001 01111111 00000000 01111111 01111100 01111111 1
2 3 4 5 6 7
No.on de variable
15
Codage binaire des entiers
Codage
hexadécimal Notion de variable
Types
de variables
Plan
Une variable possède un nom, son
identificateur, et une valeur (encodée par une suite de bits ).
angle
Avec 8 bits, on pourra coder les entiers positifs compris entre 0 et 2
8-1 , c’est-‐à-‐
dire 255 .
Ici angle a pour valeur entière 5.
0 0 0 0 0 1 0 1
Déclara.on de variable
16
Codage binaire des entiers
Codage
hexadécimal Notion de variable
Types
de variables
Plan
On déclare une variable en déclarant son identificateur (= son nom), et son type (= celui de ses valeurs encodées sur un certain nb de bits).
Un identificateur est défini
syntaxiquement par la notation (BNF):
ident ::= leFre (leFre | chiffre)*
leFre ::= a | b |
. . .|z | A|
. . .|Z |_
chiffre ::= 0 | 1 | 2 |
. . .| 9
exemples: x, _BiDoN, jour_ferie
17
Codage binaire des entiers
Codage
héxadécimal Notion de variable Types
de variables
Plan Types de variables
On dispose en C de plusieurs types d’en.ers :
int en.ers signés
unsigned int en.ers posi.fs
long int en.ers longs
unsigned long int en.ers longs posi.fs
short int en.ers pe.ts
unsigned short int en.ers posi.fs pe.ts
La taille d’un int varie selon les ordinateurs, mais on aura souvent 8 bits
pour les short , 16 (ou 32) bits pour les int , et 32 (ou 64) bits pour les long .
18
Codage binaire des entiers
Codage
héxadécimal Notion de variable Types
de variables
Plan
Si les short int sont stockés sur 8 bits, ils permeFent de coder les en.ers rela.fs appartenant à [ -‐127, 127 ] ; et les unsigned short int permeFent de coder les en.ers
posi.fs de 0 à 255.
ATTENTION aux débordements en cas d’addi.on : les bits supplémentaires seront ignorés et perdus. Le
programme sera peut-‐être faux !
19
Codage binaire des entiers
Codage
héxadécimal Notion de variable Types
de variables
Plan Types de variables
On peut aussi coder en C des nombres réels (en fait ra.onnels).
Il existe trois types de floFants, de la plus faible à la plus grande précision:
float, double et long double.
La précision effec.vement u.lisée pour chacun de ces types dépend de l'implémenta.on.
20
Codage binaire des entiers
Codage
héxadécimal Notion de variable Types
de variables
Plan Type char
Le type char désigne les caractères.
Le plus souvent ils sont encodés par le code américain standard ASCII (sur 8 bits), et sinon unicode (sur 16 bits).
Les constantes de type char sont notées entre apostrophes (quote):
‘a’ désigne le caractère a.
‘\ 012 ’ désigne le caractère de code octal 12, c’est-‐à-‐dire 10.
21
Code ASCII
22
Codage binaire des entiers
Codage
héxadécimal Notion de variable Types
de variables
Plan Déclara.ons de variables en C
/* quelques variables numériques */
short int angle_mort ;
unsigned long grandeDistance ; float taille;
/* un caractère */
char lettre ;
/* définitions de constantes */
#define EXIT_SUCCESS 0
#define BEEP ‘\007’
23
Codage binaire des entiers
Codage
héxadécimal Notion de variable Types
de variables
Plan Déclara.ons de variables en C
Pour les identificateurs (= nom des variables), on suit la syntaxe décrite précédemment.
Mais certains mots ne peuvent pas être utilisés. Ce sont les mots
réservés (ou mots clés) du langage C.
Nous avons déjà vu les noms des types de base, mais il y a d’autres mots
réservés, que nous introduirons au fur
et à mesure.
Mots réservés du langage C
24
auto double int struct
break else long switch case enum register typedef char extern return union
const float short unsigned continue for signed void
default goto sizeof volatile
do if static while
25
Pour conclure : une variable possède
une adresse. Sa localisation en mémoire lors d’une exécution du programme.
un type. C’est celui des valeurs que la variable peut prendre (int, char, etc.). Ce type a une taille (sizeof (type) qui définira le nombre de bits (différent selon les plateformes) sur lesquels sera encodée la valeur de la variable. C’est un type d’allocation mémoire.
une valeur. Elle est encodée par les bits présents à l’adresse de la variable.
un identificateur. C’est le nom de la variable dans le
texte du programme.
26
Codage binaire des entiers
Codage
héxadécimal Notion de variable Types
de variables
Plan
Merci pour votre aFen.on.
Des ques.ons ?
27
Les opérateurs utilisés pour décrire les constructions dans le format BNF sont :
– (a) : les parenthèses permettent de délimiter une expression BNF à laquelle un opérateur peut s’appliquer.
– a* : l’étoile représente la répétition (d’une construction a) un certain nombre de fois, éventuellement zéro.
– a+ : le symbole + représente la répétition( d’une construction a) un certain nombre de fois, dont au moins une.
– a | b : représente soit une construction décrite par a, soit une construction décrite par b (c’est soit a, soit b).
– [ a ] : les crochets indiquent que la présence de la construction a est optionnelle (a apparaît 0 ou 1 fois).
où a , b sont des descriptions BNF de constructions possibles