問題タブ [bit-shift]

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

actionscript-3 - AS3 ビットシフト 0?

AS 3.0コードでこれに出くわしました:

期間はNumber. ビットごとの右シフトが何をするかはわかっていると思いますが、0 ビットをシフトするポイントは何ですか? これはコード内で数回発生します。その動作を理解したいと思います。

0 投票する
5 に答える
651 参照

c - (-1 >> 1)== -1-なぜですか?

なぜ(-1 >> 1)結果になるの-1ですか?私はCで働いていますが、それは問題ではないと思います。

何が足りないのかわからない...

計算を行うCプログラムの例を次に示します。

0 投票する
6 に答える
348 参照

c - このコード行は何をしますか?

このコードが何をするかについて混乱している

特に、この " N_half>>=1 "

ありがとう

0 投票する
14 に答える
81938 参照

java - Java: long のビットが 0 か 1 かをチェックする

2^x を表すビットが 1 か 0 かを判断するには、どの方法を使用しますか?

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

c - コンパイラ警告を使用して、定数 1 の左シフトのオーバーフローをキャッチしますか?

私たちは Linux カーネル内でコードを書いているので、できる限り試してみましたが、PC-Lint/Flexelint を Linux カーネル コードで動作させることができませんでした。組み込みシンボルなどが多すぎます。しかし、それは副次的な問題です。

gcc から始めて、さまざまなコンパイラがありますが、その他のコンパイラもあります。彼らの警告オプションは時間の経過とともに強化されており、かなり強力な静的分析ツールでもあります.

捕まえたいのはこちら。はい、「マジック ナンバーがない」、「ビット シフトに注意する」など、コード レビューで見つけやすいいくつかの点に違反していることはわかっていますが、それはたまたまコードのそのセクションを見た場合に限られます。とにかく、ここにあります:

さらに更新された問題の説明 - バーが 16 に制限されていても、まだ問題があります。明確にすると、問題は暗黙的な int 型の定数であり、計画外に、すべての計算が同じサイズと符号で実行されるという規則に違反する複雑な式になります。

問題: '1' は long long ではありませんが、小さな値の定数として、デフォルトで int になります。したがって、bar の実際の値がたとえば 16 を超えない場合でも、(1<<bar)式はオーバーフローし、計算全体が台無しになります。

おそらく正しい解決策: 代わりに 1ULL を書き込みます。

この (改訂された) 問題を指摘するよく知られたコンパイラとコンパイラの警告フラグはありますか?

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

c# - c#で2つのuintをulongに結合する最良の方法は何ですか?

高/低uintを設定して、c#で2つのuintをulongに結合する最良の方法は何ですか.

ビットシフトでできることは知っていますが、構文がわからないか、BitConverter のような他の API が役立つ可能性がありますが、必要な機能を実行するメソッドが見つかりません。

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

c++ - C++ では、1 と 1i64 の違いは何ですか?

32 ビット互換のコードを 64 ビットに変換していますが、問題が発生しました。VS2008 x64 プロジェクトをコンパイルすると、次の警告が表示されます。

元のコード行は次のとおりです。

Microsoft のアドバイスに従うと、次のようになります。

コードが 32 ビット システムと 64 ビット システムの両方でコンパイルされる場合、これを行っても安全ですか? もしそうなら、最後に「i64」を追加しなければならない理由と、これが 32 ビット コンパイルに影響しない理由を説明してください。それ以外の場合は、回避策を提供していただければ幸いです。

これを超えて、さらにトリッキーなコードのように見えるものがあります。

「u」は数字が符号なしであることを意味することは理解していますが、符号付き最大値を超えない値でそれを指定する意味は何ですか...これはビットシフトと関係があると思いますか?

0 投票する
5 に答える
6247 参照

c# - バイト配列を N ビット分ビットシフトする

こんにちはビットシフトに関する簡単な質問

私はHEXで値を持っていますnew byte[] { 0x56, 0xAF }; :0101 0110 1010 1111

最初の N ビット、たとえば 12 が必要です。

次に、最下位 4 ビット (16 - 12) を右シフトして0000 0101 0110 1010(1386 dec) を取得する必要があります。

私は頭を包み込み、nビットでスケーラブルにすることはできません。

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

c++ - 複雑な式でのビットシフトの問題

方程式を次のように要約しました。

しかし、何らかの理由で予期しない結果が得られているため、何か間違ったことをしているに違いありません。これは次のように始まりました。

それは機能する完全に単純化されていないバージョンです。それらは数学的に同等ではありませんか?

すべての値は符号付き 16 ビット整数です。データセットの例は次のとおりです。

それは 6468 の答えに要約されます。しかし、最初の式では、アプリケーションは少なくとも 3% 小さいか大きいかのように動作します。これは組み込みアプリケーションであり、「通常」の特定の範囲内にあるかどうかをテストする以外に、計算の結果を確認する方法がないためです。2番目の方程式を使用すると、パラメータ内に収まりますが、「簡略化された」(ビットシフトされた) 方程式ではそうではありません。

どんな洞察でも感謝します、ありがとう。