Как Вы реализуете XOR, использующий +-*/?

Обновите ваш код

Добавьте jQuery в ваш файл index.html или angular.json

import { Component, OnInit } from '@angular/core';
declare var jQuery:any;
@Component({
  selector: 'app-comingsoon',
  templateUrl: './comingsoon.component.html',
  styleUrls: ['./comingsoon.component.css']
})
export class ComingsoonComponent implements OnInit {

constructor() {
   // load countdown 
     var c = document.createElement("script");
     c.type = "text/javascript";
     c.src = "src/assets/js/countdowntime.js";
     document.getElementsByTagName("head")[0].appendChild(c);
}

ngOnInit() {
  console.log(jQuery) // here is am getting output
} 

}
12
задан Michael Borgwardt 17 December 2008 в 09:56
поделиться

4 ответа

Я сожалею, что только знаю прямой в голове:

uint32_t mod_op(uint32_t a, uint32_t b) {
    uint32_t int_div = a / b;
    return a - (b * int_div);
}

uint32_t xor_op(uint32_t a, uint32_t b) {
    uint32_t n = 1u;
    uint32_t result = 0u;
    while(a != 0 || b != 0) {
        // or just: result += n * mod_op(a - b, 2);
        if(mod_op(a, 2) != mod_op(b, 2)) {
            result += n;
        }
        a /= 2;
        b /= 2;
        n *= 2;
    }
    return result;
}

Альтернатива в комментариях может использоваться вместо, если постараться не переходить. Но с другой стороны, решение не точно быстро ни один, и оно заставляет его выглядеть более странным :)

8
ответ дан 2 December 2019 в 04:03
поделиться

Я сделал бы это простой путь:

uint xor(uint a, uint b):    

uint ret = 0;
uint fact = 0x80000000;
while (fact > 0)
{
    if ((a >= fact || b >= fact) && (a < fact || b < fact))
        ret += fact;

    if (a >= fact)
        a -= fact;
    if (b >= fact)
        b -= fact;

    fact /= 2;
}
return ret;

Мог бы быть более легкий путь, но я не знаю об одном.

17
ответ дан 2 December 2019 в 04:03
поделиться

Я не знаю, побеждает ли это точку Вашего вопроса, но можно реализовать XOR с И, ИЛИ, и НЕ, как это:

uint xor(uint a, uint b) {
   return (a | b) & ~(a & b);
}

На английском языке это "a или b, но не a и b", который отображается точно на определение XOR.

Конечно, я не придерживаюсь строго Вашего соглашения использования только арифметических операторов, но по крайней мере этого простое, легкое для понимания переопределение.

11
ответ дан 2 December 2019 в 04:03
поделиться

Легче, если Вы имеете И потому что

A ИЛИ B = + B - (A И B)

XOR B = + B - 2 (A И B)

int customxor(int a, int b)
{
    return a + b - 2*(a & b);
}
1
ответ дан 2 December 2019 в 04:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: