[PDF] Programmation C avancée 1cm Manipulation de bits





Previous PDF Next PDF



Représentation des nombres entiers

1 octet bit bit. 31 24 23 16 15. 8 7. 0. Mot de données de 32 bits 4 bits. • Le codage du signe peut suivre différentes conventions. • + : 1011.



Transmission des données Introduction

binaire le bit le plus à droite et le bit de poids fort



8. Memoire et bus.pdf

Une mémoire stocke des mots de 8 bits (1 octet) et possède 216 adresses. Quelle est la taille totale de la mémoire en kilo-octets (Ko)?.



Polynésie septembre 2019

On envoie un octet au hasard. On suppose la transmission de chaque bit indépendante de la transmission des bits précédents. On admet que la probabilité qu'un 



Transmission des données

Dans un nombre binaire la valeur d'un bit



Chapitre 3 Codage de linformation

Le terme bit (b minuscule dans les notations) signifie « binary digit » c'est-à-dire 0 ou Sur 8 bits (1 octet)



Bit Byte Octet ? Cest quoi un bit un octet

http://technostnazaire.free.fr/page25/styled-4/downloads-42/files/Bit%20Byte%20Octet.pdf



I Représentation binaire dun entier relatif

: Les entiers sont codés sur un octet ou un multiple d'un octet : 16 bits 32 bits… 1) Codage d'un entier relatif sur 8 bits. Le bit de poids le plus fort (à 





Programmation C avancée 1cm Manipulation de bits

idem pour les types sur plusieurs octets. 16 bits. 32 bits. 01100100 octet de poids faible ... que la perte du bit de poids fort soit sensible mais.

Programmation C avanc

´ee

Manipulation de bits

Licence informatique 3

`emeann´ee

Universit

´e de Marne-la-Vall´eeLe binaire

I repr´esentation en base 2 :1286432168421 2 72
62
52
42
32
22
12

001100100

=027+126+125+024+023+122+021+020 =64+32+4 =100Le binaire I premi`eres puissances de 2`a connaˆıtre par coeur I pratique pour d´etecter les valeurs sp´eciales (1023,

4097, ...)

2 02 12 22
32
42
52
62

71248163264128

2 82
92
102
112
122
132
142

1525651210242048409681921638432768Poids fort / poids faible

I poids fort = grandes puissances de 2 I poids faible = petites puissances de 2011001002 72
62
52
42
32
22
12

0bit de poids fortbit de poids faible

Poids fort / poids faible

I idem pour les types sur plusieurs octets16 bits

32 bits011001001110100000100011110000100110010011000010

octet de poids fortoctet de poids faibleEntiers sign

´es

I codage qui d´epend de l"impl´ementation ! I bit de poids fort = signe (peu utilis´e) :

00000010= +2 en d´ecimal

10000010= -2 en d´ecimal

I probl`emes : - 0 a deux repr

´esentations (00000000et10000000)

- l"addition ne marche pas :

10000100+00000011=10000111(-4 + 3 = -7)Compl

´ement`a deux

I on prend la valeur absolue I on inverse les bits I on ajoute 1 en ignorant les d´epassements I exemple : -6 cod´e sur un octet

6 = 00000110) 6 = 11111001

6+1 = 11111010)250

1intmain(intargc ,charargv [ ] )f

2printf ( "%dnn" , (unsigned char)(6));

3return0;

4g affiche bien 250 !Compl

´ement`a deux

I l"addition fonctionne :

11111100+00000011=11111111(-4 + 3 = -1)

I

´ecriture unique de z´ero : 0 = -0

I -(-x) = x Compl

´ement`a deux

I lors d"une conversion de type, une transformation est appliqu

´ee

1intmain(intargc ,charargv [ ] )f

2charc=26;

3inti=c ;

4unsigned charuc=c ;

5unsigned intui=c ;

6printf ( "%d%d%u%unn" , c , i , uc , ui );

7return0;

8g donne nborie@perceval:~> ./test -26 -26 230 4294967270

Pas de probl

`eme lorsque les valeurs converties restent dans la plage de valeur du type cible...Op

´erateurs bit`a bit

I ne fonctionnent que sur les types entiers I `a ne pas confondre avec les op´erateurs logiques||et &&Bit 10011

Bit 20101

&(et)0001 |(ou)0111 ^(ou exclusif)0110Op

´erateur &

a10110111 b11010101 a&b10010101Op

´erateur|

a10110111 b11010101 a|b11110111 Op

´erateur^

a10110111 b11010101 a^b01100010 utile en cryptographie car r

´eversible !

a^b01100010 a10110111 b=(a^b)^a11010101XOR logique I

Il n"y a pas de xor logique en C :a^^b:(

Isolution possible : transformer les conditions logiques en entier et utiliser un xor bit `a bit

1#defineXOR(cond1 , cond2) (( cond1) != 0)ˆ(( cond2) != 0)

2

3intmain(intargc ,charargv [ ] )f

4inta=atoi ( argv [ 1 ] ) ;

5intb=atoi ( argv [ 2 ] ) ;

6if(XOR(a%2, b%2))

7 printf ( "%dou%destdivisiblepar2maispaslesdeuxnn" , a, b );

8else

9 printf ( "%det%dsontpairsouimpairstouslesdeuxnn" , a, b );

10return0;

11g se comporte ainsi nborie@perceval:~> ./test 2 2

2 et 2 sont pairs ou impairs tous les deux

nborie@perceval:~> ./test 2 3

2 ou 3 est divisible par 2 mais pas les deux

nborie@perceval:~> ./test 5 4

5 ou 4 est divisible par 2 mais pas les deux

nborie@perceval:~> ./test 5 17

5 et 17 sont pairs ou impairs tous les deuxOp

´erateur unaire

I inversion des bits (compl´ement`a un) a10110101 a01001010D

´ecalage`a gauche

I x<18110110101

181<<1101101010

(181*2)-256 = 10601101010 D

´ecalage`a gauche

I

181 est trop petit par rapport`a la taille d"unintpour

que la perte du bit de poids fort soit sensible, mais pas pour unchar

1intmain(intargc ,charargv [ ] )f

2unsigned charc=181;

3inti=c ;

4c = c<<1;

5i = i<<1;

6printf ( "%d%dnn" , c , i );

7return0;

8g donne nborie@perceval:~> ./test

106 362D

´ecalage`a droite

I x>>y: d´ecale les bits dexdeybits vers la gauche (xn"est pas modifi´e) I remplissage avec : - des 0 si type non sign

´e (ou type sign´e mais de

valeur positive), version portable - d ´epend de l"impl´ementation sinon!, version non portable I jamais de d´ecalage sur les entiers sign´es sans une tr `es bonne raison I les bits de poids faibles sont perdusD

´ecalage circulaire`a gauche

I pour d´ecalerxde n (´ecalertmpde SIZE-n bits vers la droite - d

´ecalerxde n bits vers la gauche

- fairexOUtmp

1voids h i f tc i r c u l a rl e f t (unsigned charc ,unsigned intn)f

2n=n%CHARBIT;/modulo 8 probablement/

3unsigned chartmp = (c)>>(CHARBITn );

4(c )=((c)< 5g Avec un affichage binaire de 80 (enunsigned char) et les 7 d´ecalages: nborie@perceval:~> ./test

0 1 0 1 0 0 0 0

1 0 1 0 0 0 0 0

0 1 0 0 0 0 0 1

1 0 0 0 0 0 1 0

0 0 0 0 0 1 0 1

0 0 0 0 1 0 1 0

0 0 0 1 0 1 0 0

0 0 1 0 1 0 0 0D

´ecalage circulaire`a droite

I pour d´ecaler circulairementxde n (´ecaler circulairementxde SIZE-n bits`a gauche

1voids h i f tc i r c u l a rr i g h t (unsigned charc ,unsigned intn)f

2 s h i f tc i r c u l a rl e f t (c , (CHARBITn) % CHARBIT );

3g I travailler sur du non-sign´e ! (N. Borie : Vous allez alors au devant de graves d

´econvenues...)

M

ˆeme programme qu"avant avec deschar:

nborie@perceval:~> ./test

0 1 0 1 0 0 0 0

1 0 1 0 0 0 0 0

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

Aie, le compl

´ement`a deux a introduit des 1 !

Un bit tout seul

I n`emebit`a 1 (en partant de z´ero) et les autres`a 0 =

1< Iquotesdbs_dbs50.pdfusesText_50

[PDF] bit traduction

[PDF] bits traduction

[PDF] bits twitch

[PDF] biyoloji lys 2017

[PDF] biyoloji soru bankası pdf

[PDF] biyoloji test ygs

[PDF] bjelovar info medij

[PDF] bk 789 ne demek

[PDF] blablacar marketing mix

[PDF] blablacar stratégie marketing

[PDF] blanche neige ce1

[PDF] blanche neige grimm analyse

[PDF] blanche neige histoire courte

[PDF] blanche neige histoire originale pdf

[PDF] blanche neige perrault