Побитовый сдвиг числа Double C++

705
12 декабря 2017, 19:55

Приветствую! Я начинающий программист, поэтому, если вопрос "детский" - не стоит врубать быка. Есть лабораторка, в которой нужно выполнить XOR шифрование массива вещественных чисел (double), с оговоркой, что перед этим нужно выполнить побитовый сдвиг вправо каждого числа. Как обойти то, что с double переменными не применяются битовые операции сдвига? Или мне нужно выполнять сдвиг после приведения в char?

С шифрованием, вроде, разобрался:

std::vector<double> arrDouble = { 3.0, 4.0, 5.0 };
char key = 'r';
int size = sizeof(arrDouble);
for (int i = 0; i < arrDouble.size(); i++)
{
    std::cout << "My array: " << arrDouble[i] << " ";
}
std::cout << "\n\nCripted arr: ";
for (int i = 0; i < arrDouble.size(); i++)
{
    unsigned char* item = reinterpret_cast<unsigned char*>(&arrDouble[i]);
    for (int j = 0; j < sizeof(double); j++)
    {
        *(item + j) ^= key;
    }
}
for (int i = 0; i < arrDouble.size(); i++)
{
    std::cout << arrDouble[i] << " ";
}
std::cout << "\n\n";
system("pause");
return 0;
Answer 1
  1. sizeof(arrDouble) вернет 24, а не 3 как ожидается в цикле for

  2. Битовый сдвиг. Ты прав, надо сначала кастить к unsigned типу, потом делать сдвиг. Только не понятен один момент. После побитового сдвига ты навсегда потеряешь младший бит, как потом будешь декодировать число назад?

READ ALSO
Проверка числа на четность (с++)

Проверка числа на четность (с++)

Есть код, который представлен нижеНужно переделать его с использованием функции для проверки четности введенного числа

316
Неправильное выставление уровня UAC

Неправильное выставление уровня UAC

Проект на C++ собирается Visual Studio 2015UAC Execution Level выставлен в asInvoker, но почему-то 32-битная версия приложения требует права администратора, а 64-битная...

220
Как объявить глобальный массив С++

Как объявить глобальный массив С++

Здравтсвуйте! Как объявить массив глобыльно, что бы можно было в него записывать и обращаться из всех cpp? Пробовал сделать так

243
Неправильная работа программы

Неправильная работа программы

В задаче необходимо вывести имена учащихся без троек, двоек и коловОднако моя программа выводит имена всех введенных учащихся

268