問題タブ [bitwise-operators]

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 投票する
7 に答える
22091 参照

bitwise-operators - 整数演算を使用してビット演算子を実装することは可能ですか?

私はかなり奇妙な問題に直面しています。私はビット演算をサポートしないアーキテクチャ用のコンパイラに取り組んでいます。ただし、符号付き16ビット整数演算を処理するため、以下のみを使用してビット単位の演算を実装できるかどうか疑問に思いました。

  • 加算c = a + b
  • 減算c = a --b )
  • 除算c = a / b
  • 乗算c = a * b
  • 係数c = a%b
  • 最小c = min(a、b)
  • 最大c = max(a、b)
  • 比較c =(a <b)、c =(a == b)、c =(a <= b)など
  • ジャンプgoto、for、et.c.

サポートできるようにしたいビット演算は次のとおりです。

  • またはc = a | b
  • そしてc = a&b
  • Xorc = a ^ b
  • 左シフトc = a << b
  • 右シフトc = a >> b
  • (すべての整数は符号付きなので、これは問題です)
  • 符号付きシフトc = a >>> b
  • 1の補数a = 〜b )
  • (すでに解決策が見つかりました。以下を参照してください)

通常、問題はその逆です。ビット単位のハックを使用して算術最適化を実現する方法。ただし、この場合はそうではありません。

このアーキテクチャでは書き込み可能なメモリが非常に少ないため、ビット単位の演算が必要です。ビット単位の関数自体は、多くの一時変数を使用するべきではありません。ただし、一定の読み取り専用データと命令メモリは豊富です。ここでの注意点は、ジャンプとブランチは高価ではなく、すべてのデータが簡単にキャッシュされることです。ジャンプのコストは、算術(ロード/ストアを含む)命令の半分のサイクルです。つまり、上記でサポートされているすべての関数は、1回のジャンプの2倍のサイクルのコストがかかります。


役立つかもしれないいくつかの考え:

次のコードで1の補数(ビットを否定)を実行できることがわかりました。

また、2の累乗で除算するときの古いシフトハックを覚えているので、ビット単位のシフトは次のように表すことができます。

残りのビット演算については、私は少し無知です。このアーキテクチャのアーキテクトがビット演算を提供してくれればよかったのにと思います。

また、メモリデータテーブルを使用せずに(シフト操作の場合)2の累乗を計算する高速で簡単な方法があるかどうかも知りたいです。素朴な解決策は、掛け算の分野に飛び込むことです:

またはセット&ジャンプアプローチ:

0 投票する
9 に答える
18739 参照

c++ - C ++で数値の符号ビットにアクセスするにはどうすればよいですか?

C++で数値の符号ビットにアクセスできるようにしたい。私の現在のコードは次のようになります。

それはうまくいくようで、0正の数と-1負の数が得られます。-1ただし、負の数を取得する方法がわかりません。12が

次に-12は

31ビットシフトすると

これは-1ではなく1ですが、シフトすると-1になるのはなぜですか?

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

mysql - 列でビット演算のみを実行する場合、mysqlインデックスは列'state'で役立ちますか?

さまざまな操作を行うドメインエンティティ(mysqlに保存されている)がたくさんあります。各操作は、異なるプログラムから実行されます。ビットセットとして使用される長いフィールド「flowstate」として実装したこれらのエンティティの(flow)-stateを保持する必要があります。

特定の操作を受けたエンティティをmysqlに照会するには、次のようにします。

ビット7(操作7に対応)が実行されたことを示します。(<-簡略化)

とにかく、最初はこのセットアップのパフォーマンスへの影響にはあまり注意を払っていませんでした。上記のクエリの実行がかなり遅いため、少し問題があると思います。

私が知りたいこと:「flowstate」のmysqlインデックスはまったく役に立ちますか?結局のところ、Mysqlがバイナリソートなどを使用してすばやく見つけることができる単一の値ではありません。

そうでない場合、物事をスピードアップするために私ができる他のことはありますか?。上記のようなユースケースを持つフィールドに特別な「マスクインデックス」はありますか?

TIA、Geert-jan

0 投票する
0 に答える
5242 参照

javascript - 0によるゼロフィルビットシフトは何の役に立つのですか? (あ >>> 0)

Mozilla Javascript ドキュメントでこの部分に出くわしました:

なぜこれが行われているのかよくわかりません。ゼロフィル右シフトは何の役に立つのthis.lengthです0か? 私が理解している限り、それはまったく何もしません。が整数でなくlenても、 のデフォルト値を安全に確立することですか? this.lengthこれは実現可能なケースでしょうか?>> 0もしそうなら、とはどう違い>>> 0ますか?

0 投票する
9 に答える
5165 参照

c - ビット演算子を使用した float の比較

一連のビット演算を使用して float 値を比較するにはどうすればよいですか?

0 投票する
10 に答える
118045 参照

c - 整数から個々の桁を取得する

'score'という整数があり、次のようになっているとします。

ここで私がやりたいのは、ビット演算子を使用してスコアから各桁1、5、2、9、5、8、7を取得することです(以下の編集ノートを参照)。

私はかつて同様の方法を使用して16進数の色の値から赤、緑、青の値を抽出したことがあるので、これができると確信しています。

どうすればいいですか?

編集
必ずしもビット演算子である必要はありません。そうすればもっと簡単になると思いました。

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

vb.net - ショートの左端のビットをオンにします

元の質問が変更されました。

Short値(&H8000)の左端のビットをビット単位でオフにし、他のビットはそのままにしておきます。

ビット演算子を使用したより短い方法はありませんか?

私がする時

コンパイラエラーが発生します。否定するのではなく、アップします。

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

binary - ビット単位のアクセス許可を使用するときに、どのようにしてアクセス許可を適切に無効にしますか?

了解しました。これが私が計画していることの要点です。

2つのテーブルがあります。1つは「ランク」または「役割」を持ち、もう1つはユーザーを持ちます。ロール/ユーザーベースで権限を割り当て、ユーザーベースで権限を撤回したい。

したがって、一般的な目的のために、$ role_can$user_canと$user_cantがあるとしましょう。

どの目的を指定するために、ビットごとのORを使用できることを私は知っています。$ permits =($ role_can | $ user_can)そしてそれは2つを結合します。

その後、特定の権限を撤回できるようにしたいと思います。これは通常、ビット単位のXORを使用して行われますが、ばかげた証拠にしたいです。つまり、まだ所有していない許可を除外して、誤って許可へのアクセスを許可したくないのです。

これを行うための最良の方法は何ですか?

従来(($ role_can | $ user_can)^ $ user_cant)-しかし、それはばかげたプルーフには機能しません。

私はまだビット演算にかなり慣れていないので、答えが明らかな場合は気楽にやってください。

私はPHPを使用していますが、それが機能し、簡単に理解できる限り、許容できる答えはどの言語/擬似コードでもかまいません。

ありがとう。

0 投票する
4 に答える
327 参照

c++ - ビットごとの And および Shift 操作に関する質問

の場合、次の行はどのように正確に機能しますpData = "abc"か?

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

language-agnostic - ビット演算を学習するためのリソースはありますか?

私は最近質問を受け、"how do you multiply without using the multiplication operator, without any sort of looping statements or explicit addition"ビット単位の操作にまったく慣れていないことに気付きました。

明らかにウィキペディアがありますが、初心者向けの説明がもっと必要です。このハックガイドもありますが、まだ把握できるレベルではありません。

私は Safari Books やその他のリソースを通じて優れたライブラリにアクセスできるので、本の章を指摘していただいてもかまいません。