Побитовые операции (С++)

231
13 ноября 2017, 21:11

Доброго времени суток. Есть задача, на побитовые операции. Условия задачи:

  1. Вычислить R = А & B и проверить переводом в десятичную СЧ.
  2. Вычислить R = A | B и проверить переводом в десятичную СЧ.
  3. Вычислить R = A ^ B, Q = R ^ B и проверить переводом в десятичную СЧ.
  4. Вычислить R = ~ A, Q = ~ R.
  5. Вычислить A >> c, B >> d и проверить делением.
  6. Вычислить A << d, B << c и проверить умножением.

Я со своими знаниями, смог только сделать первое условие (Вычислить R = А & B и проверить переводом в десятичную СЧ.), и то не полностью. Ниже, представлен мой код. Как можно в нем реализовать сразу все условия задачи с переводом в десятичную СЧ? Заранее спасибо.

#include "stdafx.h"
#include <locale.h>
#include <conio.h>
int main()
{
    setlocale(0,"");
    int A, B;
    printf("\nEnter A:  A = ");
    scanf_s("%d",&A);
    printf("\nEnter B:  B = ");
    scanf_s("%d",&B);
    printf("\nA & B = %d",A&B);
    getch();
    return 0;
  }
Answer 1
#include <bitset>
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
    cout << "Битовые операции на С++" << endl;
    cout << "-----------------------" << endl << endl;
    cout << "Введите число А:" << endl;
    // Ввод числа А
    int a;
    cin >> a;
    cout << endl;
    // Ввод числа B
    int b;
    cout << "Введите число B:" << endl;
    cin >> b;
    cout << endl;
    // Вычисление R пункт 1
    int r = a & b;
    cout << "R = A & B = " << r << endl;
    cout << "A = " << bitset<16>(a) << endl;
    cout << "B = " << bitset<16>(b) << endl;
    cout << "R = " << bitset<16>(r) << endl;
    cout << endl;
    // Вычисление R пункт 2
    r = a | b;
    cout << "R = A | B = " << r << endl;
    cout << "A = " << bitset<16>(a) << endl;
    cout << "B = " << bitset<16>(b) << endl;
    cout << "R = " << bitset<16>(r) << endl;
    cout << endl;
    // Вычисление R и Q пункт 3
    r = a ^ b;
    cout << "R = A ^ B = " << r << endl;
    cout << "A = " << bitset<16>(a) << endl;
    cout << "B = " << bitset<16>(b) << endl;
    cout << "R = " << bitset<16>(r) << endl;
    cout << endl;
    int q = r ^ b;
    cout << "Q = R ^ B = " << q << endl;
    cout << "R = " << bitset<16>(r) << endl;
    cout << "B = " << bitset<16>(b) << endl;
    cout << "Q = " << bitset<16>(q) << endl;
    cout << endl;
    // 4. Вычислить R = ~ A, Q = ~ R.
    r = ~a;
    cout << "R = ~A = " << r << endl;
    cout << "A = " << bitset<16>(a) << endl;
    cout << "R = " << bitset<16>(r) << endl;
    cout << endl;
    q = ~r;
    cout << "Q = ~R = " << q << endl;
    cout << "R = " << bitset<16>(r) << endl;
    cout << "Q = " << bitset<16>(q) << endl;
    cout << endl;
    //5. Вычислить A >> c, B >> d и проверить делением.
    // Ввод числа c
    int c;
    cout << "Введите число c:" << endl;
    do {
        cin >> c;
    } while (c < 0);
    cout << endl;
    // Ввод числа d
    int d;
    cout << "Введите число d:" << endl;
    do {
        cin >> d;
    } while (d < 0);
    cout << endl;
    //6 .Вычислить A << d, B << c и проверить умножением.
    int e1 = a << d;
    cout << "e = A << d = " << e1 << endl;
    cout << "A = " << bitset<16>(a) << endl;
    cout << "d = " << d << endl;
    cout << "e = " << bitset<16>(e1) << endl;
    cout << endl;
    int e2 = b << c;
    cout << "e = B << c = " << e2 << endl;
    cout << "B = " << bitset<16>(b) << endl;
    cout << "c = " << c << endl;
    cout << "e = " << bitset<16>(e2) << endl;
    cout << endl;
    cout << "Проверка умножением:" << endl;
    int f = a;
    for (int i = 0; i<d; i++) {
        f *= 2;
    }
    int g = b;
    for (int i = 0; i<c; i++) {
        g *= 2;
    }
    cout << "e1 сдвиг = " << bitset<16>(e1) << endl;
    cout << "e1 умножение = " << bitset<16>(f) << endl;
    cout << "e2 сдвиг = " << bitset<16>(e2) << endl;
    cout << "e2 умножение = " << bitset<16>(g) << endl;
    return 0;
}
    // OUTPUT:
    Битовые операции на С++
    -----------------------
    Введите число А:
    3
    Введите число B:
    4
    R = A & B = 0
    A = 0000000000000011
    B = 0000000000000100
    R = 0000000000000000
    R = A | B = 7
    A = 0000000000000011
    B = 0000000000000100
    R = 0000000000000111
    R = A ^ B = 7
    A = 0000000000000011
    B = 0000000000000100
    R = 0000000000000111
    Q = R ^ B = 3
    R = 0000000000000111
    B = 0000000000000100
    Q = 0000000000000011
    R = ~A = -4
    A = 0000000000000011
    R = 1111111111111100
    Q = ~R = 3
    R = 1111111111111100
    Q = 0000000000000011
    Введите число c:
    2
    Введите число d:
    3
    e = A << d = 24
    A = 0000000000000011
    d = 3
    e = 0000000000011000
    e = B << c = 16
    B = 0000000000000100
    c = 2
    e = 0000000000010000
    Проверка умножением:
    e1 сдвиг = 0000000000011000
    e1 умножение = 0000000000011000
    e2 сдвиг = 0000000000010000
    e2 умножение = 0000000000010000
READ ALSO
Папка .vs весит слишком много Visual Studio 2017

Папка .vs весит слишком много Visual Studio 2017

На сколько я знаю, папка "vs" предназначена для хранения пользовательских настроек проэкта

297
Как достать число из переменной?

Как достать число из переменной?

Нужно извлечь число из класса у элемента для дальнейшей работы с нимКласс извлек, но почему число то не извлекается, почему parseInt не выполняет...

340
Список всех фоновых запросов

Список всех фоновых запросов

Задача: нужно с помощью JS получить список всех фоновых запросов (ajax) особенно которые генерируют плагиныКак с помощью js/jquery это сделать?

244