Xor String без CRT

Тема в разделе "WASM.BEGINNERS", создана пользователем galenkane, 5 сен 2019.

  1. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    269
    Как можно такое сделать?
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    берешь и делаешь...
     
  3. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    при чем тут CRT ?
    это ж встроенная операция ^
     
  4. Bedolaga

    Bedolaga Member

    Публикаций:
    0
    Регистрация:
    10 июл 2019
    Сообщения:
    131
    Вопросы подобного уровня очень любят обсуждать на http://www.cyberforum.ru
     
  5. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.953
    Если кто-то простых путей не ищет, у строгой дизъюнкции есть таблица истинности :whistle2:
    01
    001
    110
     
    TermoSINteZ нравится это.
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    ну есть решение даже для любителей все делать через жопу:
    Код (Text):
    1.  
    2. // Returns XOR of x and y
    3. int myXOR(int x, int y)
    4. {
    5.   int res = 0; // Initialize result
    6.  
    7.   // Assuming 32-bit Integer
    8.   for (int i = 31; i >= 0; i--)  
    9.   {
    10.     // Find current bits in x and y
    11.     bool b1 = x & (1 << i);
    12.     bool b2 = y & (1 << i);
    13.  
    14.     // If both are 1 then 0 else xor is same as OR
    15.     bool xoredBit = (b1 & b2) ? 0 : (b1 | b2);  
    16.  
    17.     // Update result
    18.     res <<= 1;
    19.     res |= xoredBit;
    20.   }
    21.   return res;
    22. }
    23.  
     
  7. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.708
    Rel, Вы просто не умеете их готовить :)
    [math]A\oplus B = (A\; or\; B)-(A\; and\; B)[/math]
    [math]A\oplus B = (A + B)-((A \;and\; B)\ll 1)[/math]
    [math]A\oplus B =((A\; or\; B)\ll 1) - (A + B)[/math]
    [math]A\oplus B = (A - B) + ((\bar{A} \;and \;B)\ll 1)[/math]
    [math]A\oplus B = ((A\; and\; \bar{B})\ll 1) - (A - B)[/math]
     
    Последнее редактирование: 5 сен 2019
    al79, Indy_ и q2e74 нравится это.
  8. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Mikl___,

    Можно переносить части выражений с приравниванием, те как с обычной математикой ?
    Тоесть как это сделать ?

    Может матчасть по этому имеется ?

    Зависли несколько тем по ацп выражениям.
     
  9. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.953
    Любое выражение, где (0,0)=0, (1,1)=0, (1,0)=1, (0,1)=1 справедливо, будет заменой хора, но только для одного бита.
     
  10. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    f13nd,

    А для суммы бит ?
     
  11. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.953
    Сумма это когда иногда есть переносы в старшие разряды, а логические функции не любят неопределенность.
     
  12. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    Инде лишь бы позанудствовать о чем то...
     
  13. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.708
    Уоррен, Генри С. "Алгоритмические трюки для программистов" издание 2014. Подойдет? Книга лежит в wasm.in --> Ресурсы
    Подставьте вместо А и В любые числа и проверьте :)
    Да, можно. Там смесь из логических (or, and, not, shl) и арифметических (+, -) операций
     
    al79, Indy_ и TermoSINteZ нравится это.
  14. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Mikl___,

    https://wasm.in/threads/svjortka-bulevyx-funkcij.33283/

    Может найду что по теме. Выше выражения раскрываются в функции, где несколько операций с каждой переменной, те усложняются. Пока не ясно что с этими выражениями делать, нужно матчасть почитать. Ксор со сложением странно выглядит в виде мат выражения :mda:

    Вот тут есчо похожее https://exelab.ru/f/index.php?action=vthread&forum=7&topic=25876

    (~n & w) | (n&(w-1))

    Как это выражение преобразовать по формулам. Формулы выше так понимаю не из логики ?
     
  15. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.708
    логическая [math]A\;or\;B=(A\;and\;B)+(A\oplus B)[/math] просто нет разрядов, которые при сложении образуют переносы
    Сложение чисел A и B в несколько этапов
    арифметическая [math]A+B=(A\oplus B)+((A\;and\;B)\ll 1)[/math] На уровне логических вентилей сложение сводится к получению частичной суммы [math]A\oplus B[/math] и разрядов переноса [math](A\;and\;B)\ll 1[/math], из частичной суммы и разрядов переноса будет сформирована новая частичная сумма и новые разряды переноса и так далее.
    25.JPG
    Процесс будет продолжаться до тех пор, пока либо частичная сумма, либо разряды переноса не станут равными нулю. Если числа A и B равны, то мы получим удвоение числа A на первом шаге.
    Вычитание чисел A и B произойдет аналогично сложению с той только разницей, что значение B будет заменено на дополнительный к нему код.
     
    Indy_ нравится это.
  16. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Mikl___,

    Так куда понятнее, символ сложения одинаковый для OR и ADD. Тоесть это не аналого-цифровые выражения получается, однобитная математика ?
     
  17. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.708
    Там, где можно не учитывать перенос ― это уже можно перенести на многобитную логику
    Из [math]A\;or\;B=(A\;and\;B)+(A\oplus B)[/math] можем получить [math]A\;and\;B=(A\;or\;B)-(A\oplus B)[/math] и [math]A\oplus B=(A\;or\;B)-(A\;and\;B)[/math] Это всё проверяется на встроенном Windows-калькуляторе
     
    Indy_ нравится это.
  18. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    988
    Indy_, посмотри на линейную первичную перестановку шифра serpent и ее эффективную реализацию.
    Может вот этот док наведет на какие-нибудь мысли (конец документа).
    https://eprint.iacr.org/2014/453.pdf

    что бы не возиться с конкретными словами можно посмотреть в сторону вычислений на матрицах.
     
  19. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.708
    Indy_,
    похоже на мультиплексорную операцию, в зависимости от значения [math]n[/math] пропускается либо [math]w[/math], либо ([math]w-1[/math])
    00.png
    а еще это if n then (w-1) else w или n ? (w-1) : w
     
  20. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.953
    А по-моему не похоже. В контексте было сказано что это из merkle tree, надо понимать пассажир декомпилил биткоен-майнера. В исходниках биткоена единственное более-менее похожее на это:
    Код (Text):
    1. uint32_t inline f2(uint32_t x, uint32_t y, uint32_t z) { return (x & y) | (~x & z); }
    И это тупо ripemd160, алгоритм хеширования.
     
    q2e74 нравится это.