問題タブ [bitwise-xor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
586 参照

prolog - 32 ビット数の Prolog CLPFD を使用した XOR 関数の実装

Prolog CLPFD で効率的な排他的論理和 (XOR) を実装しようとしています。これは、次のような単純な述語である必要があります。

ABAxorBは自然数 (0 を含む) であり、 xorAxorBの結果です。A B

私の主な問題は効率です。まず、これらの数値をさらに処理/制約できる別々の部分に分割せずに XOR する方法を見つけることができませんでした。これらの数値を分割するプロセス (適切な制約を作成してから解決する) には、ある程度の処理が必要です。時間。第二に、以下の 2 番目のコードに示されている以外に、自然数で XOR 関数を「シミュレート」する効率的な方法を思いつくことができませんでした。

最初のコードから始めましょう。これは可能な最も単純な XOR 実装であり、1 ビット値 (0 と 1) に対してのみ機能します。

これを 1 より大きい数値に使用するには、数値をビットに分割する必要があります。

入力と出力の例:

私のコードでは時々推測する必要があり、これらすべてが 32 ビットの数値である必要がある場合、これは私の目的には遅すぎAます。そして、10 ビット以上を必要とする数値の場合、これは文字通り数百万回の推論になり、指数関数的に増加するようです。また、最適なラベル付け戦略、XOR 引数のスワッピング、その他のトリックを使用して計算を高速化しています。BAxorB

というわけで、ちょっと計算してみました。私が考案したのは、2 ビット値 (0、1、2、3) の XOR 関数です。

3 より大きい数で使用するには、前に提示したものと同様のコードがあります。

これは、最初のコードよりも 50% 近く高速に動作するようです。それでも、2 倍の差は私には小さすぎます。

それで、私の質問は次のとおりです。32 ビットの数値に対して効率的な XOR を実装するにはどうすればよいですか? これが最新のマシンでは不可能であり、何らかの計算で証明できる場合、それは私の質問に対する素晴らしい答えでもあります。最終的に、コードを改善するにはどうすればよいでしょうか? 数値を分割せずに処理する方法や、他の方法で数値を XOR する方法について、いくつかのアイデアがあるかもしれません。

追加情報: 私のコードで 3 つの引数または XOR から 2 つを推測しようとした場合、その関数の引数を自由に交換できる可能性があるため (これは数学的特性に由来します) A、バインドされた変数およびバインドされていない変数としてB設定AxorBすることをお勧めします。 . CLPFD はその方法で最も速く動作するようです。また、最適なラベリング戦略はlabeling([bisect], [B,AxorB].

0 投票する
1 に答える
180 参照

matlab - Matlab で Bitxor を mod に表す方法

一緒にビット単位で xor を実装したいです。たとえば、6 (110) と 3 (011) の 2 つのビット ペアがあります。ここで、2 つの入力のビットごとの xor を実装したいと思います。matlabのbitxor関数でできます。

しかし、bitxor の代わりに mod 関数によってスキームを実装したいと考えています。どうやってmatlabでやるの?どうもありがとう。それは私のコードです

0 投票する
1 に答える
862 参照

c - RFIDタグのチェックサムを確認する方法

この手順に従って、スキャンしたタグの値が正しいことを確認する関数を作成しましたが、常に false を返します。これが私の機能です:

私は何を間違っていますか?

バイナリ値の xor を手動で実行して、スキャンした値が有効な値であることを確認しました。

編集済み

上記のコードは、各ペアの末尾に '\0' がなかったため、機能しませんでした。これを解決すると、私のコードは CodeBlocks で動作しますが、Vinculum II IDE では動作する必要があり、常に false を返します。私が試したバージョンのリストは次のとおりです。

私はこの方法で関数を呼び出します:

0 投票する
1 に答える
254 参照

java - すべての場合において、XOR スワップは従来のスワップと同等ですか?

以下は、「その場で」文字列を逆にする、つまり Black Cat が Cat Black になるメソッドです。2 番目のスワップ セクションでは、従来のスワップ (コメント アウト) を使用するとすべてのテストに合格しますが、XOR スワップを使用すると 1 つのテストしか合格しません。

単に「交換」することはできませんか

方法

テスト

失敗時の出力

0 投票する
1 に答える
48 参照

php - PHP 5.4で3つの数値をXORする

私はこの最初のビット番号を持っています

そして、最初の数値からこれらの 3 ビットを XOR しようとしています

私がやっている

しかし、返すべきときに空を返しています

編集:これは私が欲しいものを与えてくれました。より良い方法はありますか?