Как правильно написать объект NAND с 2 входами в ООП в C ?

#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
  

Спецификации компилятора GNU C

Комментарии:

1. Спасибо, Джордан. Мне явно нужен ООП. Потому что мне действительно не нужен хороший результат. Оператор Nand, после правильной схематизации с помощью быстрого исчисления, должен показывать, когда он вызывается, с помощью каких материнских функций и т. Д… Я не пытаюсь создать функцию, мне нужно отслеживать неклассический способ взаимосвязи функций.

2. Я рад помочь, несмотря на смехотворное отрицательное мнение от кого-то.

3. Программа выполнена и работает. После определения я реализовал эквивалент next() -pythonnic в C. Теперь функция может «синхронизировать» функцию, следовательно, определять и показывать, где и когда она активирована. Идеи взяты из синтезаторов HDL.