#c #boolean-logic
#c #логическая логика
Вопрос:
Скажите, что следующий материал проходит
#include <iostream>
class Nand{
public :
bool A;
bool B;
bool s() const;
};
bool Nand::s() const {
return (!(Aamp;amp;B));
};
int main()
{
std::cout << std::boolalpha;
Nand Nand_1;
Nand_1.A = true;
Nand_1.B=false;
bool Y = Nand_1.s();
std::cout << "Input A of Nand_1 is equivalent to : " << Nand_1.A << std::endl;
std::cout << "Input B of Nand_1 is equivalent to : " << Nand_1.B << std::endl;
std::cout << "Output Y of Nand_1 is equivalent to : " << Y << std::endl;
return 0;
}
и это тоже
#include <iostream>
class Nand{
public :
bool s(bool iA, bool iB) const;
};
bool Nand::s(bool iA, bool iB) const {
return (!(iAamp;amp;iB));
};
int main()
{
std::cout << std::boolalpha;
Nand Nand_1;
bool Y = Nand_1.s(true, false);
//std::cout << "Input A of Nand_1 is equivalent to : " << Nand_1.A << std::endl;
//std::cout << "Input B of Nand_1 is equivalent to : " << Nand_1.B << std::endl;
std::cout << "Output Y of Nand_1 is equivalent to : " << Y << std::endl;
return 0;
}
Sboxes создаются с помощью простых Nand с 2 входами, соединенных вместе.
Я хочу создать шаблон класса Nand для создания сложных пакетов.
На самом деле функция () показана с двумя входами в этом фрагменте.
Я управляю вводом массивов не менее 128 бит.
Некоторые вещи написаны не очень хорошо. Второй разрешает связывание между ними, но не разрешает показывать входные данные s!
Как я могу прочитать параметры s во втором материале? Я могу использовать первый фрагмент, но я думаю, что он плохо написан (для последующего шаблона).
Это меня потрясает: (
Комментарии:
1. Кстати, почему вы ставите
;
после каждого определения функции? Я предполагаю, что ваш компилятор также выдает предупреждение, подобноеwarning: extra ';'
2. Нет такого сообщения, как ваше. Вы говорите о строке
return (!(iAamp;amp;iB));
?3. Какие у вас проблемы и что конкретно вы пытаетесь спросить?
4. Проблема, с которой я сталкиваюсь, заключается в том, что первый способ не прост в использовании, если я хочу создать шаблон класса Nand. Потому что у меня нет параметра для s(). Я спрашиваю, как использовать второй способ, с возможностью считывания значения, которое имеет параметр s. Во втором случае входные параметры будут выходными параметрами экземпляра n-1. Я не совсем понимаю по-английски, я приношу свои извинения. Скажем, мне нужно раскомментировать два первых std::cout с возможностью запроса параметров s() . Скажем, iA, iB.
5. Некоторое время перешел на C без ООП. Каждая функция NAND вызывает подфункцию для экспорта того, что мне нужно. Закрыто без ответа.
Ответ №1:
ООП совершенно не нужен для этой задачи. Вы можете использовать побитовые операторы, которые уже выполняют то, что вы просите сделать. И для хранения сложных битов вы можете использовать шестнадцатеричные числа с целочисленными типами.
unsigned short int a = 0xa; // 00001010b
unsigned short int b = 0xd; // 00001101b
// unsigned short int c,d,e,...
std::cout << std::hex << (a amp; b) << std::endl; // AND
std::cout << std::hex << (a | b) << std::endl; // OR
std::cout << std::hex << (a ^ b) << std::endl; // XOR
std::cout << std::hex << (~a) << std::endl; // NOT
std::cout << std::hex << (~b) << std::endl; // NOT
std::cout << std::hex << ~(a amp; b) << std::endl; // XAND
//std::cout << std::hex << ~(c amp; d amp; e/* amp; ..*/) << std::endl; // complicated XAND
Вы можете использовать столько переменных в элементе, сколько захотите, потому что компилятор возвращает его как выражение, которое будет вычислено в следующем выражении. Для получения подробной информации о том, что делают эти операторы и выражения, посмотрите справочные страницы для вашего конкретного компилятора.
Если вам нужно больше битов, посмотрите, как реализовать 64-разрядную версию в вашей системе (если это возможно), потому что системы не выше 64-разрядных. Вы можете использовать массивы, если вам требуется больше.
unsigned long long int x[2] = {0xffff,0xffff}; // this assignment depends on your compiler
#include <stdint.h>
int64_t x[2] = {0xffff,0xffff}; // guaranteed 64-bit as of C99
Комментарии:
1. Спасибо, Джордан. Мне явно нужен ООП. Потому что мне действительно не нужен хороший результат. Оператор Nand, после правильной схематизации с помощью быстрого исчисления, должен показывать, когда он вызывается, с помощью каких материнских функций и т. Д… Я не пытаюсь создать функцию, мне нужно отслеживать неклассический способ взаимосвязи функций.
2. Я рад помочь, несмотря на смехотворное отрицательное мнение от кого-то.
3. Программа выполнена и работает. После определения я реализовал эквивалент next() -pythonnic в C. Теперь функция может «синхронизировать» функцию, следовательно, определять и показывать, где и когда она активирована. Идеи взяты из синтезаторов HDL.