Предусмотреть возможность роботы с целыми числами с знаком и без
Помогите пожалуйста разобраться с условием задания предусмотреть возможность роботы с целыми числами с знаком и без. Для одного варианта бит, который отвечает за знак числа, не менять, во втором менять и его. Полный текст задания: Файл содержит набор целых чисел в десятичной системе исчисления. Переделать их в двоичную систему и изменить местами парные и непарные биты каждого числа. В результате сформировать второй файл, который содержит числа в десятичной системе исчисления. Предусмотреть функцию для обратных действий. Предусмотреть возможность роботы с целыми числами с знаком и без. Для одного варианта бит, который отвечает за знак числа, не менять, во втором менять и его. Вариант работы выбирает пользователь. Имена файлов вводятся пользователем с клавиатуры. Функции шифровки и дешифровки должны быть выделены в отдельный файл много файловой программы. У меня получилось реализовать первую половину задания, но сейчас я остановился на указанном выше условии, я не знаю как именно его осуществить, я не прошу готового кода для задания, я лишь хочу разобраться, хотя бы с алгоритмом или может вы знаете какой либо способ реализации. Мой код:
#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;
}
}
у меня есть файл и в нём содержаться числа, по условию программа их меняет из десятиной системы счисления в двоичную и меняет местами парные и непарные биты каждого числа, Затем формируется второй файл в который записываются эти числа но преобразованные из двоичной системы в десятичную также я реализовал функцию для обратных действий, у меня возник вопрос с тем как реализовать функцию (или другой метод) которая меняет местами биты на нечётных местах с битами на чётных местах для беззнакового целого и функция которая меняет местами биты на нечётных местах с битами на чётных местах для знакового целого, не меняя знак. а вариант выбирает пользователь.