タグ付けされた質問 「bit-manipulation」

個々のビットの操作。使用される演算子には、ビット単位のAND、OR、XOR、NOT、左シフト、および右シフトがあります。


9
ビット単位のシフト(ビットシフト)演算子とは何ですか?
私は暇なときにCを学ぼうとしましたが、他の言語(C#、Javaなど)は同じ概念(そして多くの場合同じ演算子)を持っています... 私は思ったんだけどは、コアレベルでは、何が(ビットシフトんされ<<、>>、>>>)、それが解決する何の問題を助けることができる、そしてどのような落とし穴は、曲げの周りに潜んでいるのですか?言い換えれば、そのすべての良さをビットシフトするための絶対初心者向けガイドです。


23
「2の補数」とは何ですか?
私はコンピュータシステムのコースに参加しており、Two's Complementに部分的に苦労しています。私はそれを理解したいのですが、読んだすべてが私のために絵をまとめていません。ウィキペディアの記事や、テキストブックなどのさまざまな記事を読みました。 したがって、私はこのコミュニティWikiの投稿を開始して、2の補数とは何か、それをどのように使用するか、キャストなどの演算(符号付きから符号なし、またはその逆)、ビット単位演算、ビットシフト演算中に数値にどのように影響するかを定義したいと思いました。 私が期待しているのは、プログラマが簡単に理解できる明確で簡潔な定義です。

5
単一の乗算でビットを抽出する
別の質問への回答で使用されている興味深いテクニックを見て、少しよく理解したいと思います。 符号なし64ビット整数が与えられ、次のビットに関心があります。 1.......2.......3.......4.......5.......6.......7.......8....... 具体的には、次のように上位8つの位置に移動します。 12345678........................................................ で示されるビットの値は.関係ありません。それらを保持する必要はありません。 溶液は、不要なビットをマスクし、によって結果を乗算することでした0x2040810204081。結局のところ、これでうまくいきます。 この方法は一般的ですか?この手法を使用してビットのサブセットを抽出できますか?そうでない場合、方法が特定のビットのセットに対して機能するかどうかをどのようにして理解しますか? 最後に、与えられたビットを抽出するために(a?)正しい乗数をどのように見つけますか?


10
列挙型の最も一般的なC#ビット演算
私の人生では、ビットフィールドのビットを設定、削除、切り替え、またはテストする方法を思い出せません。わからないか、めったに必要ないので、混同しています。したがって、「ビットチートシート」があればよいでしょう。 例えば: flags = flags | FlagsEnum.Bit4; // Set bit 4. または if ((flags & FlagsEnum.Bit4)) == FlagsEnum.Bit4) // Is there a less verbose way? 他のすべての一般的な操作の例を、できれば[Flags]列挙型を使用したC#構文で提供できますか?


1
Javaのダブルチルド(~~)の意味は何ですか?
Guavaのソースコードを閲覧しているときに、次のコード(hashCode内部クラスのの実装の一部)に遭遇しましたCartesianSet。 int adjust = size() - 1; for (int i = 0; i < axes.size(); i++) { adjust *= 31; adjust = ~~adjust; // in GWT, we have to deal with integer overflow carefully } int hash = 1; for (Set<E> axis : axes) { hash = 31 * hash …

6
ビットごとのOR 0を使用して数値をフロア
私の同僚は、ビットごとまたは以下を使用して浮動小数点数をフロアする方法に出くわしました。 var a = 13.6 | 0; //a == 13 私たちはそれについて話していて、いくつかのことを疑問に思いました。 どのように機能しますか?私たちの理論では、このような演算子を使用すると、数値が整数にキャストされ、小数部分が削除されます。 それを行うことよりも利点はありMath.floorますか?多分それは少し速いですか?(しゃれは意図されていません) 欠点はありますか?多分それはいくつかのケースでは動作しませんか?私たちはそれを理解しなければならなかったので、明快さは明白なものです、そしてまあ、私はこの質問を書いています。 ありがとう。


25
次の2の累乗に切り上げ
次の2のべき乗の数を返す関数を書きたいのですが。たとえば、入力が789の場合、出力は1024になるはずです。ループを使用せずにビット演算子を使用するだけでこれを実現する方法はありますか?


9
C#intからbyte []
私はそれを使用intするbyte[]1つの方法に変換する必要がありますBitConverter.GetBytes()。しかし、それが次の仕様と一致するかどうかは不明です。 XDR符号付き整数は、[-2147483648,2147483647]の範囲の整数をエンコードする32ビットのデータです。整数は2の補数表記で表されます。最上位バイトと最下位バイトは、それぞれ0と3です。整数は次のように宣言されます。 ソース: RFC1014 3.2 上記の仕様を満たすintからbyteへの変換をどのように実行できますか?
172 c#  .net  bit-manipulation  nfs 

11
〜x +〜y ==〜(x + y)は常にfalseですか?
このコードは常にfalseと評価されますか?どちらの変数も2の補数の符号付き整数です。 ~x + ~y == ~(x + y) 条件を満たす数はあるはずだと思います。私は間の数字をテストしようとした-5000と5000が、平等を達成したことがありません。条件の解を見つけるための方程式を設定する方法はありますか? 片方をもう片方に交換すると、プログラムに潜むバグが発生しますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.