Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
6 / 6 / 6
Регистрация: 15.10.2014
Сообщений: 98

XOR without XOR

21.10.2014, 12:30. Показов 2488. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые знатоки)

В общем-то интересует (как можно воплотить подобную штуку)
---------
By knowing that XOR may be derived from formula:
( A∨B)∧¬( A∧B) ,
create a program in C language that calculates XOR function WITHOUT using XOR
operator.
Calculation done in bitwise mode, i.e. every bit separately
The program should take 2 binary parameters from command line, make XOR and output the
result
---------

Ну для начала, как я понял, с командной строки путем введения аргументов вводится два двоичных числа

Как-то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include <cstdio>
#include <iostream>
#include <string>
 
using namespace std;
 
int main(int argc, char *argv[])
 
{ 
    int i; 
    for (i = 0; i < argc; i++)
    {   
        cout << "argv[" << i << "] include " << argv[i] << endl; 
    }
    cout << argv[1] << " - first number" << endl;
    cout << argv[2] << " - second number" << endl;
 
    return 0;
 
}
А вот что делать дальше я не могу как-то даже представить оО
Если кто может помочь - буду очень благодарен
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.10.2014, 12:30
Ответы с готовыми решениями:

xor, not
кто может помочь с операциями ^(xor) и -(not). если можно навести примеры с реальными числами что они делают, например 2^3 или что-то...

XOR шифрование
Прошу написать мне алгоритм расшифровки проксоренного сообщения. Мне известно что длина ключа 3 символа, это латинские буквы нижнего...

XOR Шифратор
Сделал шифратор на основе XOR’а, но если ввести пробел в сообщении которое надо зашифровать, програма во всю отказывается шифровать, то...

5
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
21.10.2014, 12:49
Ели нужна логическая функция, то так
C++
1
2
3
4
bool XOR(bool A,bool B)
{
    return (A||B) && !(A||B);
}
Если побитовая, то так
C++
1
2
3
4
5
template<class T>
T XOR(T A,T B)
{
    return (A|B) & ~(A|B);
}
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
21.10.2014, 12:53
Если не цепляться к этому
Цитата Сообщение от Keter Посмотреть сообщение
( A∨B)∧¬( A∧B)
то можно проще сделать
C++
1
return a != b;
P.S. это при условии, что вводится двоичное представление числа в виде строки и нужно для каждого символа вызвать эту ф-цию
0
6 / 6 / 6
Регистрация: 15.10.2014
Сообщений: 98
21.10.2014, 13:20  [ТС]
zss,
Нужно чтобы программа работала приблизительно так

( A∨B)∧¬( A∧B)
A | B | AUB | A^B | -(A^B) | ( A∨B)∧¬( A∧B)
0 | 0 | 0 | 0 | 1 | 0
0 | 1 | 1 | 0 | 1 | 1
1 | 0 | 1 | 0 | 1 | 1
1 | 1 | 1 | 1 | 0 | 0


000 - 0
001 - 1
010 - 2
011 - 3
100 - 4
101 - 5
110 - 6
111 - 7


пример
вводим
----
111 - 7
110 - 6
---- используем программу
001 - 1

пример 2
вводим
----
110 - 6
111 - 7
---- используем программу
001 - 1

То-есть программа выводила вычитание по модулю десятеричных чисел, которые обозначены двоичными

Добавлено через 6 минут
Для меня в общем-то на данный момент основная проблема то, что не хватает теоретических знаний, так как cmd пользуюсь впервые.
Я не очень понимаю как введенный с командной строки аргумент разбить по-символьно, чтобы с символами можно было проводить вышеобозначенные операции.
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
21.10.2014, 13:23
Цитата Сообщение от Keter Посмотреть сообщение
аргумент разбить по-символьно, чтобы с символами можно было проводить вышеобозначенные операции.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main(int argc, char *argv[])
 
{ 
    int i; 
    for (i = 0; i < argc; i++)
    {   
        cout << "argv[" << i << "] include " << argv[i] << endl; 
    }
    cout << argv[1] << " - first number" << endl;
    cout << argv[2] << " - second number" << endl;
 
    const char *firstNumber = argv[1];
    const char *secondNumber = argv[2];
 
    for (int i = 0; i < strlen(firstNumber); i++) {
        cout << firstNumber[i];
    }
    cout << endl;
 
    return 0;
 
}
1
6 / 6 / 6
Регистрация: 15.10.2014
Сообщений: 98
22.10.2014, 20:07  [ТС]
Kastaneda, спасибо пойду пробовать!
Как сделаю программу напишу сюда код)

Добавлено через 21 час 52 минуты
Izvinite chto pishu translitom - siju s kompiutera v universitete

osnovnaya chastb koda dodelana no natknulsia na neskolko problem

1) Vo pervih ne vihodit vivesti otvet v binarnoy sisteme. S pomoshyu SStream zapisivayu otvet v stroku Answer, no kak vivesti etu stroku na ekran? Pri perevode v peremennuyu int teriayutsia nuli, stoyashie vperedi.
2) Nujno sozdatb biblioteku znacheniy
kak tut
000 - 0
001 - 1
010 - 2
011 - 3
100 - 4
101 - 5
110 - 6
111 - 7
i tak dalee, chto bi pri "Answer" binarnom vivodilo opredelennoe desiaterichnoe chislo.
Dumal sdelatb cherez Switch/case ili If/else no eto ochen gromozdko, mojet est bollee prostoe reshenie?

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include "stdafx.h"
#include <cstdio>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <sstream>
 
using namespace std;
 
int answer = 0;
 
int lib();
 
int main(int argc, char *argv[])
 
{ 
 
    const char *firstNumber = argv[1];
    const char *secondNumber = argv[2];
 
    cout << "First number is ";
    for (int i = 0; i < strlen(firstNumber); i++) {
        cout << firstNumber[i];
    }
    cout << endl;
 
    cout << "Second number is ";
    for (int i = 0; i < strlen(secondNumber); i++) {
        cout << secondNumber[i];
    }
    cout << endl;
 
    if (strlen(firstNumber) != strlen(secondNumber))
    {
        cout << "----------------------------------------------------" << endl;
        cout << "Input is uncorrect!" << endl;
        cout << "Please enter two numbers" << endl;
        cout << "First number should be same length as Second number! " << endl;
        cout << "Case your numbers are not the same - please add some '0'" << endl;
        cout << "At the beginning of the shortest" << endl;
        cout << "----------------------------------------------------" << endl;
        exit(0);
    }
 
    else
    {
        stringstream Answer;
        int Length = strlen(firstNumber);
        for(int i = 0 ; i <= Length ; i++)
        {
            switch (firstNumber[i])
            {
                case '1':
                    switch (secondNumber[i])
                    {
                        case '1':
                            {
                                Answer << '0';
                                break;
                            }
                        case '0':
                            {
                                Answer << '1';
                                break;
                            }
                    }
                    break;
                case '0':
                    switch (secondNumber[i])
                    {
                        case '1':
                            {
                                Answer << '1';
                                break;
                            }
                        case '0':
                            {
                                Answer << '0';
                                break;
                            }
                    }
                    break;
            }
        }
            
            Answer >> answer;
            cout << "After using XOR" << endl;
            cout << "in binary: "<< answer << endl;
            //cout << "in decimal: " << lib() ;
            
            
            
    }
 
 
 
 
 
 
    return 0;
 
}
 
// libriary of answers
    int lib()
    {
        if (answer = 00000)
            cout << 0 << endl;
 
        return 0;
    }
Добавлено через 8 часов 49 минут
я разобрался с библиотекой но все равно остается вопрос:

каким способом записать посимвольно (из switch/case) в строку или массив, чтобы при выводе не терялись нули спереди. (грубо говоря чтобы вывод был символов а не целикового числа)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.10.2014, 20:07
Помогаю со студенческими работами здесь

Альтернатива XOR
Какая есть альтернатива энкрипции XOR?

Оператор xor
Всем добрый вечер.Чем отличаются следующие выражения: (a || b) &amp;&amp; !(a &amp;&amp; b); и (a^b);

быстрый xor
Нужно про-xor-ить биты в числе. Можно ли это сделать быстрее, чем u_char r = 0; for (i = 0; i &lt; sizeof (u_char); ++i) r ^= (n...

Xor encrypt
Есть файл зашифрованный с помощью 16 битного ключа только xor. Какие есть предложения для вскрытия шифра?

Шифрование xor
Пишу шифрование методом xor. На вход поступает строка, каждый символ строки преобразуется в соответствующий ASCII-код. Получаем вектор...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru