問題タブ [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 投票する
5 に答える
1001 参照

java - 2の大きな累乗を操作する効率的な方法

2の累乗をコーディングする最も効率的な方法は、整数のビットシフトを使用することです。

1 << n私にくれます2^n

intただし、またはで許可されている最大値よりも大きい数がある場合long、2の累乗を効率的に操作するために何を使用できますか?

(数値に対して加算、乗算、除算、モジュラス演算を実行できる必要があります)

0 投票する
3 に答える
966 参照

c++ - C++ ビットシフト

私はC++でビットとバイトを扱うのが初めてで、以前に開発されたコードを見ています.コードで何が起こっているのかを理解するのに助けが必要です. バイト配列があり、いくつかのデータが入力されており、データが 0x0F で「&」されていることに気付きました (以下のコードを参照してください)。私はそこで何が起こっているのか本当に理解していません....誰かがそれを説明できれば、それは大いに感謝されます. ありがとう!

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

c - C のビット シフトとポインターの奇妙な点、説明を探す

説明できない奇妙なことを発見しました。ここの誰かが、これが何であるか、またはなぜ起こっているのかを見ることができるなら、私は知りたい. 私がやっていることは、次のように高く整列された 12 ビットを含む unsigned short を取得することです。

1111 1111 1111 0000

次に、短いバイトの各バイトが MSB をパッドとして 7 ビットを保持するようにビットをシフトします。上記の結果は次のようになります。

0111 1111 0111 1100

私がやったことはこれです:

これにより、正しいように見えますが、最後のシフトの結果は次のように設定されたビットのままになります。

0111 1111 1111 1100

非常に奇妙な。unsigned char を一時ストレージとシフトとして使用すると、次のように機能します。

この結果は次のとおりです。

0111 1111 0111 1100

ここで何が起こっているのですか?

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

c - サーキュラーシフトc

intを1つ右にシフトして、戻す必要があります

Javaでは、n>>1を返すことができます。

これはCで可能ですか?

与えられた方法は次のとおりです

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

c++ - Hex から LSB の値を取得する (C コード)

私はCでこのようなコードを持っています:

最終的な値が次のようになるように抽出する必要があります。

16 進値に少なくとも 1 つのゼロがある場合にのみ、抽出して機能させることができました。

以下のコードを使用します。

最後のelse {...} ブロックが面倒なようです。何か案は?ありがとう!

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

java - 右シフト演算子が1ではなく0を生成するのはなぜですか?

私は自分自身にJavaを教えており、ThinkinginJavaの演習を行っています。

116ページの演習11では、整数をすべての2進位置で右シフトし、各位置をInteger.toBinaryStringで表示する必要があります。

ソリューションガイドでは、出力は次のようになります。

このコードを実行すると、次のようになります。

ここで何が起こっているのか。数字は途切れていますか?

jdk1.6.0_2064ビットを使用しています。この本はjdk1.532ビットを使用しています。

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

c++ - シフトカウントが負または大きすぎるエラー-正しい解決策?

ビッグエンディアンのクワッドワード(抽象ベースファイルI / Oクラス)を読み取るための次の関数があります。

readb()関数はBYTEを読み取ります。使用されるtypedefは次のとおりです。

問題は、シフト操作で最初の4行に4つのコンパイラ警告が表示されることです。

警告C4293:'<<':シフトカウントが負または大きすぎる、未定義の動作

この警告が発生する理由は理解できますが、正しく取り除く方法がわからないようです。私は次のようなことをすることができます:

qT |= (unsigned long long)readb() << 56;

これにより警告は削除されますが、他に問題はありません。BYTEは常に正しく拡張されますか?多分私はそれについて考えすぎていて、解決策はとても簡単です。ここで私を助けてくれませんか?ありがとう。

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

c - ビットいじりハック: ビットをインターリーブする明白な方法

私はこの問題に興味があります

明らかな方法でビットをインターリーブする

( http://graphics.stanford.edu/~seander/bithacks.htmlから)

誰かがこれが例でどのように機能するかを説明できますか?

たとえば、 と がある場合x = 100101y = 010101結果はどうなるでしょうか。

0 投票する
3 に答える
727 参照

assembly - 8086アセンブリでの大きなバイナリシフト?

512バイトの長さのデータのバイナリチャンクがあります。一度右にシフトしたい場合、最も効率的な方法は何でしょうか。

今のところ(アセンブリに非常に新しい)私の最も良い推測は、最初にチャンク(おそらくint)をチェックして、それが何をシフトアウトし、シフトし、次に前のintがシフトアウトして運び続けるかを確認する必要があるということです。これにより、データがシフトダウンされます。もっと簡単な方法はありますか?このキャリーテクニックを使用する必要がある場合、シフトできる最大のチャンクは何ですか?DWord?QWord?

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

vb.net - 一部のアセンブリをVB.NETに変換する-SHRオペレーターの動作が異なりますか?

さて、ここで簡単な質問

私はいくつかのアセンブリを研究していて、いくつかのアセンブリルーチンをVB.NETに変換し直しています

さて、私が問題を抱えている特定のコード行があります。アセンブリでは、次のことを想定しています。

次に、次の行が実行されます

それは私に次のことを与えます:

さて、VB.NETでは、私は次のことをします

これは私に同じことを与えるべきです...しかし、それは値0F0D0408の代わりにSLIGHTビットが異なります私はFF0D0408を取得します

では、ここで何が起こっているのでしょうか。