Bonjour,
En fait en faisant ca:
on obtienne : 0000 0001, 0000 0011, 0000 0111, ...Code:
1
2
3
4 char c; c = 0; c += 1; c = c << 1;
est ce qu'il est possible d'effectuer ceci mais dans l'autre sens: 1000 0000, 1100 0000, ... ?
Version imprimable
Bonjour,
En fait en faisant ca:
on obtienne : 0000 0001, 0000 0011, 0000 0111, ...Code:
1
2
3
4 char c; c = 0; c += 1; c = c << 1;
est ce qu'il est possible d'effectuer ceci mais dans l'autre sens: 1000 0000, 1100 0000, ... ?
oui
avec l'operateur >>
en fait, pour avoir ce que tu dit, il faut une boucle et le résultat dépend de ce que tu mets dans ta boucle, mais comme elle n'est pas donnée, on ne peux faire que des suppositions
L'opérateur bitwise OR me semble plus indiqué dans les deux cas.
Pour partir du bit de poids fort, il suffira de faire un OR 0x80 (1000000 en binaire) et de décaler à chaque fois d'un pas vers la droite.
le code suivantte donneraCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 #include <stdio.h> #include <stdlib.h> void affich(unsigned char x); int main(void) { int i; unsigned char c; c = 0; affich(c); for (i=0;i<7;i++) { c = c << 1; c += 1; affich(c); } printf("\n"); c = 128; affich(c); for (i=0;i<7;i++) { c = c >> 1; c += 128; affich(c); } return 0; } void affich(unsigned char x) { int i, pui=128, xx; xx=(int) x; for (i=0;i<8;i++) { printf("%d",xx/pui); xx = xx - (xx/pui) * pui; pui = pui / 2; } printf("\n"); }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 00000000 00000001 00000011 00000111 00001111 00011111 00111111 01111111 10000000 11000000 11100000 11110000 11111000 11111100 11111110 11111111