10
votes

Ajout de nombres binaires en C ++

Comment ajouterais-je deux numéros binaires en C ++? Quelle est la bonne logique?

Voici mon effort, mais cela ne semble pas être correct: xxx


0 commentaires

13 Réponses :


2
votes

Il y a un bogue: xxx

u peut être utile d'imprimer dans inverse xxx


5 commentaires

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/...



2
votes

Vous pouvez utiliser "Opération bitwise ou" pour réduire le code car xxx

Vous pouvez également convertir les deux chiffres en somme décimale et leur retour à nouveau en binaire.

Conversion décimale en binaire xxx


0 commentaires

30
votes

Eh bien, c'est un problème assez trivial.

Comment ajouter deux numéros binaires en C ++. Quelle est la logique de celle-ci.

pour ajouter deux nombres binaires, A et b. Vous pouvez utiliser les équations suivantes pour le faire.

SUM = A XOR B

porter = AB

C'est l'équation pour un Half additionneur .

Maintenant pour la mettre en œuvre, vous devrez peut-être comprendre comment une additionneur complet fonctionne. < / p>

SUM = A XOR B XOR C

Carry = AB + BC + CA

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.

Voici un exemple de code pour calculer la somme. xxx


0 commentaires

0
votes

faire à plusieurs reprises

(x, y) <- ((x & y) << 1, x ^ y)


0 commentaires

7
votes

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;
}


3 commentaires

Que représente le m?


@Xploit: le m est un masque pour extraire le LSB d'un bitset. Par exemple, ("uvwxyz" >> 2) & "1" -> "x" .


Et qu'est-ce que diff ?



1
votes

Vos matrices sont un élément trop petit pour votre indexation.

int A [3] a seulement 3 éléments, donc A [3] = 1 n'est pas valide (il a comportement non défini ) depuis C'est accessible au 4ème élément qui n'existe pas.
De même pour les autres tableaux.

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.

(ce qui se passe probablement dans votre cas est que l'écriture en dehors des matrices écrase les autres variables.)

Vous n'éiminez pas non plus le tableau Résultat , son contenu n'est que quelques données aléatoires.
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.


0 commentaires

1
votes

Voici les erreurs de votre code et de code fixe sont également inférieures à "

  1. int A [] était de taille 3 afin qu'il ne puisse pas stocker à la 3ème index. Utilisez INT A [4].
  2. si (a [i] + b [i] + port == 1) Des valeurs erronées ont été attribuées dans ce résultat de la mise à jour de la vérification [I] = 1; porter = 0.
  3. La séquence de chèques est inversée.
  4. Le dernier transport n'a pas été stocké dans le résultat.
  5. Le résultat d'addition stocké dans la matrice de résultat était dans l'ordre inverse, donc imprimé en sens inverse.

    Voici la pièce de travail du code: xxx


0 commentaires

1
votes
#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;

}

0 commentaires

0
votes

Vous devriez faire ce xxx


0 commentaires

0
votes

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;
}


0 commentaires

0
votes

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;
}


0 commentaires

0
votes

Un moyen simple: xxx


0 commentaires

0
votes
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;
}

0 commentaires