Şimdi Ara

c++ ta iki binary sayıyı toplamak

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
6
Cevap
0
Favori
554
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • arkadaşlar merhaba c++ ta iki binary sayıyı toplamak istiyorum bir kod yazdım kodum çalışıyor ancak tam olarak istediğim gibi değil

    #include <iostream>
    #include <bitset>
    using namespace std;

    int main()
    {
    int decimal1 = 0, decimal2 = 0, digit1, digit2, sum;
    char tmp = '0';
    cout << "Enter two binary numbers:" << endl;
    tmp = cin.get();

    if (cin.fail() || !(tmp == '0' || tmp == '1')) {
    cout << "Invalid input." << endl;
    return 0;
    }
    while (cin.good() && (tmp == '0' || tmp == '1')) {
    digit1 = tmp - '0';
    decimal1 = decimal1 * 2 + digit1;
    tmp = cin.get();
    }

    if (cin.fail() || !(tmp == '\n')) {
    cout << "Invalid input." << endl;
    return 0;
    }

    tmp = cin.get();
    if (cin.fail() || !(tmp == '0' || tmp == '1')) {
    cout << "Invalid input." << endl;
    return 0;
    }
    while (cin.good() && (tmp == '0' || tmp == '1')) {
    digit2 = tmp - '0';
    decimal2 = decimal2 * 2 + digit2;
    tmp = cin.get();
    }
    if (cin.fail() || !(tmp == '\n')) {
    cout << "Invalid input." << endl;
    return 0;
    }

    sum = decimal1 + decimal2;

    bitset<8> x(sum);
    cout << "Sum: " << x << endl;


    return 0;
    }


    kodum şu şekilde ve çıktı şu şekilde oluyor:
    Enter two binary numbers:
    101
    101
    Sum: 00001010

    ancak ben onun

    Enter two binary numbers:
    101 101
    Sum: 1010

    bu şekilde olmasını istiyorum. yani sayıları alt alta değilde yan yana arada 1 boşluk bırakarak girmek ve Sum: kısmında baştaki 0 ları göstermemek istiyorum(biliyorum bitset<8> kısmından kaynaklanıyor onun yerine ne kullanabilirim acaba?)







  • ikinci kısmı hallettim (00001010 yerine sadece 1010 yazdırabiliyorum artık) ancak ilk kısım (yanyana araya boşluk koyarak yazma) için hala yardıma ihtiyacım var
  • #include <iostream> 
    #include <cstring>
    #include <stdlib.h>
    #include <bitset>
    using namespace std;

    string al;
    string temp;
    string say1_temp;
    string say2_temp;
    string sonuc;
    bool kilit(false);
    int sayi1(0);
    int sayi2(0);
    char *ptr(NULL);
    int n;

    unsigned char boyut(0);


    int cevir(int n)
    {
    int cikis = 0;

    for(int i=0; n > 0; i++) {

    if(n % 10 == 1) {
    cikis += (1 << i);
    }
    n /= 10;
    }

    return cikis;
    }

    int main() {

    cout<<"iki binary sayi girin (max 8 Bit , max 8 bit) ";getline (cin,al );
    boyut=al.length();
    cout<<endl;



    ptr=new char[boyut];
    int *dizi=new int[boyut];
    strcpy(ptr, al.c_str());

    for ( int i = 0 ; i < (int)boyut; i++ ) {

    if (ptr[i]==(int)32 ){kilit=true;}
    else if (ptr[i]==(int)48 || ptr[i]==(int)49 ) {
    if(kilit)say1_temp+=ptr[(int)i];
    else say2_temp+=ptr[(int)i];
    }

    else {cout<<"hata"<<endl; break;}
    }
    kilit=false;
    temp="";


    cout<<endl;
    n=atoi(say1_temp.c_str());
    sayi1=cevir(n);
    n=atoi(say2_temp.c_str());
    sayi2=cevir(n);
    cout<<"iki sayinin toplami (dec): "<<sayi1+sayi2;
    cout<<endl;
    bitset<16> x(sayi1+sayi2);
    sonuc=x.to_string();
    strcpy(ptr, sonuc.c_str());
    cout<<"Sayinin orijinal hali: (bin): "<<sonuc<<endl;
    cout<<endl;


    for ( int i = 0 ; i < 16; i++ ) {

    if (ptr[i]==(int)49 ) kilit=true;
    if (kilit)temp+=ptr[(int)i];

    //cout<<ptr[i];

    }
    cout<<endl;
    cout<<"son deger (bin): "<<temp<<endl;

    return 0;
    }




  • the_night T kullanıcısına yanıt
    peki burda bitset<16> olarak alındığı için 17 basamaklı bir binary girdiğimde sonuç çıkmıyor o sınırlamayı nasıl kaldırırım?
  • Bu program max 8 bitlik iki sayıya göre ayarlandı 16 bitlik iki sayi toplatmak için revize etmek gerekecek bu iki sayının da toplamı 32 bit içinde olacagindan bitset<32> olmalı ama dediğim gibi program çok ilkel oldu fazla değişken var dilerseniz sayı çevrimlerini direk diziden yaptırın hazır fonksiyon biliyorsanız

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.