#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::changeEvent(QEvent *e)
{
    QDialog::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

int Dialog::HaeLuku(int n)  //funktio lukujen noutamiseksi kineEdit;stä
{
    bool ok;
    int x;

    if (n == 0)
        x = ui->lineEdit->text().toInt(&ok, 2);
    else
        x = ui->lineEdit_2->text().toInt(&ok, 2);

    if (!ok) {
        QMessageBox viesti(QMessageBox::Warning, "Virhe",
                           "Syota binaari luku",
                           QMessageBox::Ok, this);
        viesti.exec();
    }

    return x;
}

void Dialog::SyotaLuku(int x)   //funktio luvun syöttämiseksi lineEdit;iin
{
    ui->lineEdit->setText(QString::number(x, 2));
}

void Dialog::on_pushButton_clicked()    //tehtävä 23
{
    int x = HaeLuku(0) & 0b11111111;    //haetaan luku; 8 ensimmäistä bittiä

    int z = x & ~0b11000;   //nollataan bitit 4 ja 5

    SyotaLuku(z & 0b11111111);  //syötetään luku; vain 8 ensimmäistä bittiä
}

void Dialog::on_pushButton_2_clicked()    //tehtävä 24
{
    int x = HaeLuku(0) & 0b11111111;    //haetaan luku; 8 ensimmäistä bittiä

    int z = x | 0b11000;    //laitetaan bitit 4 ja 5 arvoon yksi

    SyotaLuku(z & 0b11111111);  //syötetään luku; vain 8 ensimmäistä bittiä
}

void Dialog::on_pushButton_3_clicked()    //tehtävä 25
{
    int x = HaeLuku(0) & 0b11111111;    //haetaan luku; 8 ensimmäistä bittiä

    int z = x ^ 0b11000;    //vaihdetaan bittien 4 ja 5 arvot

    SyotaLuku(z & 0b11111111);  //syötetään luku; vain 8 ensimmäistä bittiä
}

void Dialog::on_pushButton_4_clicked()    //tehtävä 26
{
    int x = HaeLuku(0) & 0b1111,    //haetaan luku; 4 ensimmäistä bittiä
    y = HaeLuku(1) & 0b1111;    //haetaan toinen luku; 4 ensimmäistä bittiä

    int z = x | (y << 4);   //otetaan ensimmäinen luku ja
                            //lisätään siihen toisen luvun bitit siirrettynä
                            //neljän bitin verran vasemmalle
                            //(sama kuin kertoisi luvulla 16)

    SyotaLuku(z & 0b11111111);  //syötetään luku; vain 8 ensimmäistä bittiä
}

void Dialog::on_pushButton_5_clicked()    //tehtävä 27
{
    int x = HaeLuku(0) & 0b1111111111111111;    //haetaan luku; 16 ensimmäistä bittiä

    int z = ((x & 1) << 15) |           //otetaan luvun ensimmäinen bitti ja siirretään ne 15 bittiä vasemmalle
            ((x >> 15) & 1) |           //lisätään siihen luvun viimeinen bitti siirrettynä 15 bittiä oikealle
            (x & 0b0111111111111110);   //lisätään vielä alkuperäinen luku ilman ensimmäistä ja viimeistä bittiä

    SyotaLuku(z & 0b1111111111111111);  //syötetään luku; vain 8 ensimmäistä bittiä
}
  • No labels
You must log in to comment.