Pozyczka w odejmowaniu binarnym. C++

2012-04-25 14:04
0

Witam serdecznie, prosilbym o pomoc z prostym odejmowaniem binarnym. Wszystko jest ok oprocz wypadkow z pozyczka(drugi if).

#include "stdafx.h" 
#include <iostream> 
#include <cstdlib> 
using namespace std; 

int main () 
{ char tab[8], tab2[8]; 
  int wynik[9], w=0, i; 

cout << "Podaj pierwsza liczbe binarna(8bitow): " << endl; 
cin>> tab; 
cout << "Podaj druga liczbe binarna(8bitow): " << endl; 
cin>> tab2; 

for (i=0; i<8; i++) 
      { if (tab[i]>=tab2[i]) 
        { w=tab[i]-tab2[i]; 
          wynik[i]=w; 
      } 

        if (tab[i]<tab2[i]) 
        { int j=i; 
            for (i; i<8; i++) 
          { if (tab[i]==1) 
              { tab[i]=0; 
                for (i; i>j; i--) tab[i-1]=1; 
                  i=9; 
              } 
          } 
          i=j; 
            if (tab[i]>=tab2[i]) 
          { w=tab[i]-tab2[i]; 
            wynik[i]=w; 
        } 
        } 

      } 

cout << "Wynik odejmowania wynosi: "; 
for (i=0;i<8;i++) cout << wynik[i]; 
cout << endl; 
system ("PAUSE"); 
return 0; 
} 
Najpierw to sformatuj ten kod normalnie... Poza tym co jest nie tak? - Patryk27 2012-04-25 14:15

Pozostało 580 znaków

2012-04-25 14:22
xxx_xx_xx
0

Ale to nie tak się robi z tym CF
jak masz liczbe binarna a7.. a0 i liczbę b7..b0
to odejmując c = a - b robisz tak:

int cf = 0;
for(int i=0; i<8; i++) {
    if (a[i] < b[i] + cf ) {
       c[i] = 2 - (b[i] + cf)
       cf = 1;
    }
    else {
        c[i] = a[i] - (b[i]+cf)
        c[i] = 0;
    }
}

nie testowałem ale chyba tak to powinno działać.

Pozostało 580 znaków

2012-04-25 14:30
xxx_xx_xx
0

Sory wkradł sie jeden mały błąd :

int cf = 0;
for(int i=0; i<8; i++) {
    if (a[i] < b[i] + cf ) {
       c[i] = 2 - (b[i] + cf)
       cf = 1;
    }
    else {
        c[i] = a[i] - (b[i]+cf)
        cf = 0;  // <- tutaj
    }
}

Pozostało 580 znaków

2012-04-25 14:34
Rev
2

A można oszukiwać?

std::string sfirst, ssecond;
std::cin >> sfirst >> ssecond;

std::bitset<8> first(sfirst), second(ssecond);
unsigned long long ullresult = first.to_ullong() - second.to_ullong();
std::bitset<8> result(ullresult);

std::cout << result;

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0