Comment ajouterais-je deux numéros binaires en C ++? Quelle est la bonne logique?
Voici mon effort, mais cela ne semble pas être correct: p>
13 Réponses :
Il y a un bogue: u peut être utile d'imprimer dans inverse p>
Quel est le but btw? Il pourrait être plus facile de se convertir en décimal -> Ajouter -> Convertir en binaire,
Oui, c'est peut-être, mais quelle est l'algo de convertir binaire en décimal?
@Programmer Le binaire binaire B à la position n, où le bit de la bonne position a la position 1 a une valeur décimale de B * 2 ^ (N-1). Essayez d'appliquer cette logique à certains petits nombres binaires. Par exemple, essayez de l'utiliser pour convertir les numéros 1011 et 110 en décimal. Vous devriez avoir 11 et 6 respectivement.
@Programmer pour la conversion binaire en décimal Vous voudrez peut-être suivre: wikihow.com/convert -Brom-binaire-to-décimal .
@Pogramer Regardez: Stackoverflow.com/Questtions/2115346/...
Vous pouvez utiliser "Opération bitwise ou" pour réduire le code car Vous pouvez également convertir les deux chiffres en somme décimale et leur retour à nouveau en binaire. P> Conversion décimale en binaire p>
Eh bien, c'est un problème assez trivial.
Comment ajouter deux numéros binaires en C ++. Quelle est la logique de celle-ci. em> p> blockquote>
pour ajouter deux nombres binaires, A et b. Vous pouvez utiliser les équations suivantes pour le faire. P>
SUM = A XOR B P>
porter = AB p> BlockQuote>
C'est l'équation pour un Half additionneur . P>
Maintenant pour la mettre en œuvre, vous devrez peut-être comprendre comment une additionneur complet fonctionne. < / p>
SUM = A XOR B XOR C P>
Carry = AB + BC + CA P> BlockQuote>
Depuis que vous stockez vos numéros binaires dans INT Array, vous voudrez peut-être comprendre opération bitwise . Vous pouvez utiliser ^ pour XOR, | opérateur pour ou, et opérateur pour et. p>
Voici un exemple de code pour calculer la somme. p>
xxx pré> p>
faire à plusieurs reprises
(x, y) <- ((x & y) << 1, x ^ y)
Depuis que vous avez posé des questions sur C ++, vous méritez une réponse C ++. Utilisez Bitsets :
#include <bitset>
#include <iostream>
int main() {
std::bitset<5> const a("1001");
std::bitset<5> const b("1111");
// m here is a mask to extract the lsb of a bitset.
std::bitset<5> const m("1");
std::bitset<5> result;
for (auto i = 0; i < result.size(); ++i) {
std::bitset<5> const diff(((a >> i)&m).to_ullong() + ((b >> i)&m).to_ullong() + (result >> i).to_ullong());
result ^= (diff ^ (result >> i)) << i;
}
std::cout << result << std::endl;
}
Que représente le m?
@Xploit: le m code> est un masque pour extraire le LSB d'un bitset. Par exemple, ("uvwxyz" >> 2) & "1" code> -> "x" code>.
Et qu'est-ce que diff code>?
Vos matrices sont un élément trop petit pour votre indexation. p>
Cela signifie que tout le programme a un comportement indéfini, c'est-à-dire que cela peut faire n'importe quoi ou rien du tout. P>
(ce qui se passe probablement dans votre cas est que l'écriture en dehors des matrices écrase les autres variables.) P>
Vous n'éiminez pas non plus le tableau code> Résultat code>, son contenu n'est que quelques données aléatoires. int A [3] code> a seulement 3 éléments, donc A [3] = 1 code> n'est pas valide (il a comportement non défini em>) depuis C'est accessible au 4ème élément qui n'existe pas.
De même pour les autres tableaux. p>
Puisque vous ne mettez à jour que 4 de ses éléments mais que vous imprimez tous (et plus), la sortie sera également des données aléatoires. p>
Voici les erreurs de votre code et de code fixe sont également inférieures à "
Voici la pièce de travail du code: p>
#include <stdio.h>
int main()
{
long binary1, binary2;
int i = 0, remainder = 0, sum[20];
printf("Enter the first binary number: ");
scanf("%ld", &binary1);
printf("Enter the second binary number: ");
scanf("%ld", &binary2);
while (binary1 != 0 || binary2 != 0)
{
sum[i++] =(binary1 % 10 + binary2 % 10 + remainder) % 2;
remainder =(binary1 % 10 + binary2 % 10 + remainder) / 2;
binary1 = binary1 / 10;
binary2 = binary2 / 10;
}
if (remainder != 0)
sum[i++] = remainder;
--i;
printf("Sum of two binary numbers: ");
while (i >= 0)
printf("%d", sum[i--]);
getch();
return 0;
}
Vous devriez faire ce
une solution non conventionnelle, mais cela fonctionne:
int main() {
int A[] = { 0, 0, 0, 1, 1, 0, 1, 0};
int B[] = { 0, 0, 0, 0, 1, 1, 0, 0};
int size = sizeof(A)/sizeof(*A);
int C[size+1];
int t = 0;
for(int i = size-1; i > -1; i--){
C[i+1] = A[i]+B[i]+t;
t = C[i+1]/2;
C[i+1] %= 2;
}
C[0] = t;
}
Et si leurs tailles ne sont pas les mêmes? De plus, vous voudriez permettre à l'utilisateur de saisir les numéros binaires (dans ce cas, représentant des entiers) comme des entiers et non comme des éléments de tableaux. Voici un morceau de code qui accomplit ceux: -)
#include <iostream>
using namespace std;
// Add two numbers in binary
void sumBinary(int num1, int num2, int* sum12){
int mod1 = 0;
int mod2 = 0;
int carry = 0;
int factor = 1;
int flag = 0;
*sum12 = 0;
while (!flag){
mod1 = num1 % 10;
mod2 = num2 % 10;
num1 /= 10;
num2 /= 10;
if ((carry + mod1 + mod2) == 2){
*sum12 += 0;
carry = 1;
}
else if ((carry + mod1 + mod2) == 3){
*sum12 += factor;
carry = 1;
}
else if ((carry + mod1 + mod2) == 0){
*sum12 += 0;
carry = 0;
}
else{
*sum12 += factor;
carry = 0;
}
factor *= 10;
if ((num1 == 0) && (num2 == 0)){
*sum12 += carry*factor;
flag = 1; }
}
}
void main(){
int num1, num2, sum12;
cout << "Enter the first binary integer number: ";
cin >> num1;
cout << "Enter the second binary integer number: ";
cin >> num2;
sumBinary(num1, num2, &sum12);
cout << "The sum in binary form is :" << sum12 << endl;
}
Un moyen simple:
int main(){
ios::sync_with_stdio(0); cin.tie(0);
int num1=12, num2=45, sum=0;
bool b1, b2, carry=0;
for(int i=0;i<32;i++){
b1=( 1<<i ) & num1;
b2=( 1<<i ) & num2;
sum = (b1 ^ b2 ^ carry) ? sum ^ (1<<i) : sum;
carry = ((b1 & b2) | (b1 & carry) | (b2 & carry));
}
cout<<sum;
return 0;
}