Bonjour,
existe-il une fonction permettant de réaliser directement un complément à 2?
Merci.
Version imprimable
Bonjour,
existe-il une fonction permettant de réaliser directement un complément à 2?
Merci.
Citation:
Envoyé par sandball22
JcCode:int y = (~x) + 1;
[EDIT] en effet, il faut un +1 :wink:[/EDIT]
C'est le complément à 1 ça, non ?Citation:
Envoyé par fearyourself
Pour moi, ce serait plutôt :
Code:int y = ~x + 1;
Exact, c'est corrigé :merci:Citation:
Envoyé par Freed0
Jc
Il vaut mieux eviter de faire des manipulations de bits avec des entiers signes.
Et le complement a 2 s'ecrit alors - en C.
Cela ne marche pas. J'obtiens des chiffres erronés.
En effet, j'utilise ce code. Dans cette boucle for, je récupère un tableau de binaires que je mets dans le tableau phas[i].Code:
1
2
3
4
5
6
7
8 for(i=0;i<24;i++) { phas[i] = phase[i]; printf("%d",phas[i]); phas[i] = ~phas[i]+1; printf("%d",phas[i]); }
Voila ce que j'obtient en simulant : 02551254125402551254025502550255025502551.......
S'il vous plaît, ajoutez des espaces entre les éléments...Citation:
Envoyé par sandball22
Ce code affiche le complément à deux de chaque élément du tableau sans erreur:
qui afficheCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #include <stdio.h> #include <stdlib.h> #define ARRAY_SIZE(tab) (sizeof (tab)/sizeof *(tab)) int main(void) { int i; unsigned int tableau[10]; for (i = 0; i < ARRAY_SIZE(tableau); ++i) { tableau[i] = i; } for (i = 0; i < ARRAY_SIZE(tableau); ++i) { printf("%d: Le complément à 2 de %x est %x\n", i, tableau[i], ~tableau[i] + 1); } return EXIT_SUCCESS; }
Je ne sais pas de quel type sont les éléments de ton tableau phas, mais comme l'a signalé Jean-Marc Bourguet, il vaut mieux se limiter aux entiers non-signés pour effectuer des opérations bit par bit.Code:
1
2
3
4
5
6
7
8
9
10 0: Le complément à 2 de 0 est 0 1: Le complément à 2 de 1 est ffffffff 2: Le complément à 2 de 2 est fffffffe 3: Le complément à 2 de 3 est fffffffd 4: Le complément à 2 de 4 est fffffffc 5: Le complément à 2 de 5 est fffffffb 6: Le complément à 2 de 6 est fffffffa 7: Le complément à 2 de 7 est fffffff9 8: Le complément à 2 de 8 est fffffff8 9: Le complément à 2 de 9 est fffffff7
Thierry
voici mon programme:
Pourquoi j'obtiens : -102 au lieu de 011????Code:
1
2
3
4
5
6
7
8 ..... int k; k = 101; k = (~k); printf("\nk%d",k);
Où est le problème ? Vu que :
-x = ~x +1
c'est assez cohérent...
OK compris :
101 vaut "cent un" et pas "cinq", c'est une écriture décimale et pas binaire.
Désolé, mais je vois pas pourquoi cela est cohérent.
j'ai la séquence binaire suivante 101 au départ, après complément à 2 , j'orais 010+1=011 ce qui fait 3, donc au final il s'agit de -3.
Pourquoi -102?
Comment faire alors ?
Parce ce que ta machine représente les nombre négatifs en complément à 2. Donc, si tu fait:Citation:
Envoyé par sandball22
et tu prends le complément à 1 i.e. ~k, tu obtient la valeur -102. Ensuite, ~k + 1 fait bien -101. Je ne vois pas où est le problème.Code:k = 101;
En ce qui concerne la détermination du complément à 2 de tes représentations binaires sous formes de chaînes de caractères, voici un exemple: http://www.developpez.net/forums/sho...9&postcount=21
Thierry
Non, c'est du décimal. D'ailleurs quand tu vois -102, tu dois bien te douter que ce n'est pas du binaire...Citation:
Envoyé par sandball22