問題タブ [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.
c++ - <<演算子はC++で何をしていますか?
以下の例では、<<
オペレーターは正確に何をしていますか?ビット演算子ではないと思います。
ここでコードが何をするかを理解しています。標準出力を使用し、このテキストを送信し、行末を送信します。生のバイナリを除いて、この<<の使用に出くわしたことはありません。
私はC++から始めています。そして、ある種のオペレーターとして、これの説明とそれが何を意味するのかを検索するのは難しいです。誰かが私を啓蒙したり、グーグルで何を探すべきかについての指針を教えてもらえますか?
ありがとうロス
c++ - Weird behavior of right shift operator (1 >> 32)
I recently faced a strange behavior using the right-shift operator.
The following program:
Outputs:
What happens with the foo()
function ? I understand that the only difference between what it does and the last 2 lines, is that the last two lines are evaluated at compile time. And why does it "work" if I use a 64 bits integer ?
Any lights regarding this will be greatly appreciated !
Surely related, here is what g++
gives:
assembly - asmで左にシフトしてからすぐに右にシフトしますか?
免責事項 : 私は asm 初心者です。完全に理解するには、おそらく2の補数または何かを確認する必要があります:(
私は次の目的について混乱しています:
なぜシフトバック?そして動き?
.net - .Net での浮動小数点データ型のシフトに関する詳細は?
私の記憶が正しければ、double または float は、符号ビット、指数、および仮数の 3 つの部分に分割されます。
double がシフトされるとき、ビットは変数のバイナリ全体をシフトしますか、それとも仮数をシフトするだけですか?
c - 次のCコード行がわかりません
次のスレッドを見つけました
。IPとサブネットマスクからブロードキャストアドレスを計算し、そこにhttp://lpccomp.bc.ca/netmask/netmask.cへのリンクを見つけました。
誰かが次の行を説明してもらえますか、私にはわかりません:
特にmask & (1L<<(32-maskbits))
c - Cでビットをシフトアウトするにはどうすればよいですか?
クロック信号に基づいてバイトの個々のビットをシフトアウトする関数を C で記述しようとしています。これまでのところ、私はこれを思いつきました...
ここで、DataPin はデータをシフトアウトするポート ピンを表し、ClkPin はクロック ポート ピンです。
バイトの LSB から開始して、デバイスに 8 ビットをシフトアウトさせたいと考えています。何らかの理由で、出力ピンが常に高いままです。ポート ピンが適切に構成されていることは確かなので、これは純粋に論理的な問題です。
bit-manipulation - 簡単な計算を除いて、ビットシフトを使用する正当な理由はありますか?
ビット単位の演算と、それらがさまざまな目的(たとえば、アクセス許可)にどのように役立つかを理解しています。しかし、ビットシフト演算子が何を使用しているのか理解していないようです。それらがどのように機能するかは理解していますが、本当に迅速な乗算または除算を実行したい場合を除いて、それらを使用したいシナリオは考えられません。ビットシフトを使用する他の理由はありますか?
c - 論理的、算術的なビット単位のシフト
何かを明らかにしようとしている。
算術的、論理的なビット単位のシフトに関しては、次のように理解しています。
<<
両方で同じように動作します>>
シフトは、論理シフトがバイトに常に 0 を埋め込むのに対し、算術シフトはバイトに符号ビットを埋め込むという点で異なります。
Cを使用してこれをどのように区別できますか?
私が理解していることから、実際のオペレーターは同じ<<
です、>>
コマンドの違いは次のとおりです。
私にお知らせください、
c++ - AVRでは論理的な右シフトは2の累乗で速いですか?
2の累乗でシフトすると、論理的な右シフトの実行が速くなるかどうかを知りたいです。
たとえば、
より速く
皆さんの最初の反応は、このような小さなことについて心配する必要はないということです。正しいアルゴリズムとコレクションを使用して、重要な桁を削減していることを感謝します。私はあなたに完全に同意しますが、私は本当に組み込みチップ(ATMega328)からできる限りのことを絞り出そうとしています-私はちょうど「woohoo!」に値するパフォーマンスシフトを得ました。除算をビットシフトに置き換えることで、これが重要になることをお約束します。
c++ - 左側のオペランドが負の値の場合、左シフト操作が未定義動作を呼び出すのはなぜですか?
Cでは、左側のオペランドが負の値の場合、ビット単位の左シフト演算によって未定義動作が呼び出されます。
ISO C99(6.5.7 / 4)からの関連する引用
E1 << E2の結果は、E1の左シフトE2ビット位置です。空になったビットはゼロで埋められます。E1に符号なしタイプがある場合、結果の値はE1×2 E2であり、結果タイプで表現可能な最大値より1を法として減少します。E1に符号付きタイプと非負の値があり、E1×2 E2が結果タイプで表現可能である場合、それが結果の値です。それ以外の場合、動作は定義されていません。
しかし、C ++では、動作は明確に定義されています。
ISO C ++-03(5.8 / 2)
E1 << E2の値は、E1(ビットパターンとして解釈される)の左シフトされたE2ビット位置です。空のビットはゼロで埋められます。E1がunsigned型の場合、結果の値はE1に数量2を掛けてE2の累乗になり、E1の型がunsignedlongの場合はULONG_MAX+1を法として、それ以外の場合はUINT_MAX+1になります。[注:定数ULONG_MAXおよびUINT_MAXはヘッダーで定義されています)。]
つまり、
Cでは未定義動作を呼び出しますが、動作はC++で明確に定義されています。
ISO C ++委員会が、Cでの動作とは対照的に、その動作が明確に定義されていると見なすようになったのはなぜですか?
一方、implementation defined
左オペランドが負の場合の動作はビット単位の右シフト演算ですよね?
私の質問は、なぜ左シフト操作がCで未定義動作を呼び出すのか、そしてなぜ右シフト演算子が実装定義の動作だけを呼び出すのかということです。
PS:「標準がそう言っているので、それは未定義の振る舞いです」のような答えを与えないでください。:P