Предусмотреть возможность роботы с целыми числами с знаком и без

Помогите пожалуйста разобраться с условием задания предусмотреть возможность роботы с целыми числами с знаком и без. Для одного варианта бит, который отвечает за знак числа, не менять, во втором менять и его. Полный текст задания: Файл содержит набор целых чисел в десятичной системе исчисления. Переделать их в двоичную систему и изменить местами парные и непарные биты каждого числа. В результате сформировать второй файл, который содержит числа в десятичной системе исчисления. Предусмотреть функцию для обратных действий. Предусмотреть возможность роботы с целыми числами с знаком и без. Для одного варианта бит, который отвечает за знак числа, не менять, во втором менять и его. Вариант работы выбирает пользователь. Имена файлов вводятся пользователем с клавиатуры. Функции шифровки и дешифровки должны быть выделены в отдельный файл много файловой программы. У меня получилось реализовать первую половину задания, но сейчас я остановился на указанном выше условии, я не знаю как именно его осуществить, я не прошу готового кода для задания, я лишь хочу разобраться, хотя бы с алгоритмом или может вы знаете какой либо способ реализации. Мой код:

#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <fstream>
#include <bitset>
#include <string>
using namespace std;
uint16_t f_num;
uint16_t arr[100];
string path;
 
 
void Func()
{
    int count = 0;
        ifstream fout;
        fout.open(path);
        if (!fout.is_open())
        {
            cout << "file ne naiden";
        }
        else {
            cout << "file open" << "\n";
            int i = 0; 
            while (i < 100 && fout >> f_num) {
                arr[count++] = bitset<8>((f_num & 0xAA) >> 1 | (f_num & 0x55) << 1).to_ulong();
                std::cout << bitset<8>(f_num) << '\t' << bitset<8>((f_num & 0xAA) >> 1 | (f_num & 0x55) << 1) << std::endl;
                
                
            }
        }
        fout.close();
        ofstream fin;
        fin.open("Example.txt");
        if (!fin.is_open())
        {
            cout << "file ne naiden";
        }
        else {
            for (int i = 0; i < 5; ++i)
            {
                fin << arr[i] << "\n";
            }
        }
        fin.close();
}
 
int main()
{
    cout << "path"<< "\n";
    cin >> path;
    int count = 0;
    // файл в котором содержаться набор чисел с которыми нужно взаимодействовать
    ifstream fin;
    fin.open("Example.txt");
    if (!fin.is_open())
    {
        cout << "file ne naiden";
    }
    else {
        cout << "file open" << "\n";
        int i = 0;
        while (i < 100 && fin >> f_num) {
            arr[count++] = bitset<8>((f_num & 0xAA) >> 1 | (f_num & 0x55) << 1).to_ulong();
            std::cout << bitset<8>(f_num) << '\t' << bitset<8>((f_num & 0xAA) >> 1 | (f_num & 0x55) << 1) << std::endl;
 
        }
    }
        fin.close();
        
        for (int i = 0; i < count; ++i)
        {
            cout << arr[i] << "\n";
        }
 
        // создать файл и ввести название файла
 
  
     
     ofstream fout;
     fout.open(path);
     if (!fout.is_open())
     {
     cout << "file ne naiden";
     }
    else {
         for (int i = 0; i < count; ++i)
         {
             fout << arr[i]<< "\n";
         }
         }
        fout.close();
 
 
        cout << "xotite obratno perevesti?"<<"\n";
        cout << "da"<<"\n";
        cout << "net"<<"\n";
        int var1;
        cin >> var1;
        switch (var1)
        {
        case 1: {
            cout << "f" << "\n";
            Func();
            break;
        }
        case 2: {
            return 0;
            break;
        }
        }
        cout << "xotite cmenit dlya bezznakovogo celogo?" << "\n";
        cout << "da" << "\n";
        cout << "net" << "\n";
        int var2;
        cin >> var2;
        switch (var2)
        {
        case 1: {
            
            break;
        }
        case 2: return 0;
            break;
        }
}

у меня есть файл и в нём содержаться числа, по условию программа их меняет из десятиной системы счисления в двоичную и меняет местами парные и непарные биты каждого числа, Затем формируется второй файл в который записываются эти числа но преобразованные из двоичной системы в десятичную также я реализовал функцию для обратных действий, у меня возник вопрос с тем как реализовать функцию (или другой метод) которая меняет местами биты на нечётных местах с битами на чётных местах для беззнакового целого и функция которая меняет местами биты на нечётных местах с битами на чётных местах для знакового целого, не меняя знак. а вариант выбирает пользователь.


Ответы (0 шт):