Bonjour,
existe-il une fonction permettant de réaliser directement un complément à 2?
Merci.
Bonjour,
existe-il une fonction permettant de réaliser directement un complément à 2?
Merci.
Envoyé par sandball22
Jc
Code : Sélectionner tout - Visualiser dans une fenêtre à part int y = (~x) + 1;
[EDIT] en effet, il faut un +1[/EDIT]
C'est le complément à 1 ça, non ?Envoyé par fearyourself
Pour moi, ce serait plutôt :
Code : Sélectionner tout - Visualiser dans une fenêtre à part int y = ~x + 1;
Exact, c'est corrigé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 : Sélectionner tout - Visualiser dans une fenêtre à part
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...Envoyé par sandball22
Ce code affiche le complément à deux de chaque élément du tableau sans erreur:
qui affiche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
voici mon programme:
Pourquoi j'obtiens : -102 au lieu de 011????
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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?
Parce ce que ta machine représente les nombre négatifs en complément à 2. Donc, si tu fait: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 : Sélectionner tout - Visualiser dans une fenêtre à part 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
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
Non, c'est du décimal. D'ailleurs quand tu vois -102, tu dois bien te douter que ce n'est pas du binaire...Envoyé par sandball22
Partager