Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
#1

Работа с битами - C++

28.05.2011, 22:44. Просмотров 818. Ответов 1
Метки нет (Все метки)

Не могу понять, почему не правильно работает программа.
Программа зашифровывает строку, выводит, потом расшифровывает и выводит.
Принцип шифрования:
Функция leftORright шифрует один байт информации, используя циклический сдвиг всех битов влево или вправо на N разрядов.
Составить функцию, шифрующую строку символов и расшифровывающую эту строку с помощью составленной функции leftORright.
Попробуйте ввести t1. Не знаю правильно ли шифрует цифру 1, но расшифровывает правильно, а вот букву t расшифровывает не правильно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#define LEN 10
#include "string.h"
#include "iostream"
#include "iomanip"
#include "conio.h"
using namespace std;
void sdvigVlevo(char& s)
{
    if(s&(1<<7))
    {
        s<<=1;
        s|=1;
    }
    else
        s<<=1;
}
 
void sdvigVpravo(char& s)
{
    if(s&1)
    {
        s>>=1;
        s|=1<<7;
    }
    else
        s>>=1;
 
}
 
void leftORright(char& s, int N, int vibor)
{
    if(vibor == 0)
    {
        for(int i = 0 ; i<N; ++i)
            sdvigVlevo(s);
    }
    else
    {
        for(int i = 0 ; i<N; ++i)
            sdvigVpravo(s);
    }
}
 
 
void sposob1(char* str, int N, int vibor)
{
    char* cpystr = str;
 
    for(;*str; ++str)
        leftORright(*str,N,vibor);
    cout << cpystr<<endl;
    str = cpystr;
    for(;*str; ++str)
        leftORright(*str,N,!vibor);
    cout << cpystr;
 
 
}
int main(void)
{
    setlocale(LC_ALL,"rus");
    char str[LEN];
    int vibor, N;
    cout << "Введите строку символов: ";
    cin >> str;
    do
    {
        cout << "Введите 0, чтобы сдвинуть биты в лево.\nВведите 1, чтобы сдвинуть в право.\n";
        cin >> vibor;
    }while(vibor!= 0 && vibor!= 1);
    do
    {
        cout << "Введите N.\n";
        cin >> N;
    }while(N<=0);
 
    sposob1(str,N,vibor);
        
    _getch();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2011, 22:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с битами (C++):

Работа с битами И Работа с символьными данными - C++
1. Ввести 8 символов. В символе с наибольшим кодом заменить 5-й бит единицей, а в символе с наименьшим кодом 6-й бит - нулем. Вывести...

работа с битами - C++
доброй ночи, форумчане, необходима ваша помощь) как и всем тут... вот изучаю с++ и добрался до работы с битами, учу решением задач. на...

Работа с битами - C++
три раза писал но все равно не получается((( 1-)Ввести последовательность из 8 символов. Сравнить 5-й и 6-й биты каждого символа. Если...

Работа с битами. - C++
Здрасте. Дана задача: Определить на сколько в числе А больше значущих битов, что равны единице, чем битов, что равны нулю. Помогите...

Работа с битами. - C++
помогите!! как писать эту на программе с++ Ввести последовательность из 8 символов. Сравнить 5-й и 6-й биты каждого символа. Если они...

Работа с битами - C++
Я уже задолбался... :wall: Может мне кто нибудь подскажет как из 00111010 (58) получить 00001010 (10) хотя бы каким методом... код...

1
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
29.05.2011, 08:18 #2
вместо char используй unsigned char

t1 влево один
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <iostream>
//#include "string.h"
//#include "iostream"
//#include "iomanip"
//#include "conio.h"
 
#define LEN 10
 
using namespace std;
 
void sdvigVlevo(unsigned char& s)
{
        if(s&(1<<7))
        {
                s<<=1;
                s|=1;
        }
        else
                s<<=1;
}
 
void sdvigVpravo(unsigned char& s)
{
        if(s&1)
        {
                s>>=1;
                s|=1<<7;
        }
        else
                s>>=1;
 
}
 
void leftORright(unsigned char& s, int N, int vibor)
{
        if(vibor == 0)
        {
                for(int i = 0 ; i<N; ++i)
                        sdvigVlevo(s);
        }
        else
        {
                for(int i = 0 ; i<N; ++i)
                        sdvigVpravo(s);
        }
}
 
 
void sposob1(unsigned char* str, int N, int vibor)
{
        unsigned char* cpystr = str;
 
        for(;*str; ++str)
                leftORright(*str,N,vibor);
        cout << cpystr<<endl;
        str = cpystr;
        for(;*str; ++str)
                leftORright(*str,N,!vibor);
        cout << cpystr;
 
 
}
int main(void)
{
        setlocale(LC_ALL,"rus");
        char str[LEN];
        int vibor, N;
        cout << "Введите строку символов: ";
        cin >> str;
        do
        {
                cout << "Введите 0, чтобы сдвинуть биты в лево.\nВведите 1, чтобы сдвинуть в право.\n";
                cin >> vibor;
        }while(vibor!= 0 && vibor!= 1);
        do
        {
                cout << "Введите N.\n";
                cin >> N;
        }while(N<=0);
 
        cout << '.' << str << '.' << " " << vibor << " " <<  N << endl;
        
        sposob1((unsigned char *)str,N,vibor);
                
        cin.get();
        return 0;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2011, 08:18
Привет! Вот еще темы с ответами:

Работа с битами - C++
Стоит задача: вывести все двоичные коды чисел от 0 и до 2n-1. Сделать напролом могу(переводить в цикле каждое число в двоичную с-му и...

Работа с битами - C++
В общем вот локальная проблема: есть int, который выступает в роли сетки нулей и единиц, два примера, разницу между которыми не могу...

Работа с битами в Char - C++
Доброго времни суток! Стоит задача сделать операцию сложения битов по модулю 2 над двумя объектами типа char, приравнять полученный...

Работа с битами числа - C++
Извлечь 5 битов числа A, начиная со второго и вставить их в число B, начиная с третьего бита. Нашел код...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru