問題タブ [bits]
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 ++など)でのパフォーマンスを比較することをお勧めします。これらの言語は、コンパイラーがビット関連の最適化を実行するためのより多くのスペースを提供すると想定しているためです。
ありがとうございました。
さて、完全な問題のコンテキスト。
インタビューにはいくつかのセクションがあり、それらのいくつかは本当にケーキであり、いくつかは悪夢でした。ビット関連のセクションはちょっと大変で、次のような質問が含まれていました。
浮動小数点数の仕様
float
、、double
高速
float
->int
変換(範囲がわかっている場合はさらに高速)
これらはそれほど難しいものではありませんでしたが、このビット関連セクションの最後の質問として、私が知っているビット演算を列挙し、それらのパフォーマンスを比較するように求められました。
「アーキテクチャ、コンパイラ、...具体的、実際には問題ではない、ビット単位はすでにかなり低レベルである」など、あまり説明的ではないものに答えましたが、この答えはひどいものだと思います。
c - メモリ内のビットの読み取り/書き込み
void*
メモリアドレスが与えられ、このメモリアドレスにあるビットを出力する必要があるとしましょう。これどうやってするの?
私のプロセッサでは、メモリアドレスはメモリ値と同様に32ビットであり、intも32ビットです。だから私はこれを行うことを考えました:
次に、単純な算術演算 (いくつかのmod
とdiv
演算) によって、 に保存された値のビットを取得しますmemory_address
。
たとえばvalue mod 2
、この値の最後のビットなどを提供します。しかし、私が知る限り(私は別のビットを期待していました)、うまくいきません。理由はありますか?
また、これを「実行」し、メモリからビットを読み書きする準備ができているCソースコードを知っている人はいますか?
python - バイナリ文字列をファイルに書き込む
テキストファイルを圧縮するハフマン符号化プログラムを書いています。テキストファイルをハフマンでエンコードされた値に変換したので、ファイルに書き込む必要があります。私は現在Pythonの「BitVector」モジュールを使用していますが、ファイルの読み取りと書き込みを行う場合は遅すぎます。これを行う他の方法はありますか(できればはるかに高速です)?
ありがとう。
encryption - 暗号化アルゴリズムの強度をビット単位で定義する方法は?
私は暗号化アルゴリズムを設計中です。アルゴリズムは対称 (単一キー) です。
アルゴリズムの強度をビット単位でどのように測定しますか? キーの長さはアルゴリズムの強さですか?
編集:
レッスン 1 : 暗号化アルゴリズムを設計しないでください。AES などは、ある理由で学者によって設計および標準化されています。
レッスン 2 : 暗号化アルゴリズムの強度はビット単位ではなく、鍵のサイズです。アルゴリズムの強度は、その設計によって決まります。一般に、より大きな鍵サイズを使用するアルゴリズムは総当たり攻撃が困難であり、したがってより強力です。
c - 2つのビットパターンを連結する
2つの変数をマージする必要があります。どちらも署名されていないintです。
- 最初:11000000
- 2番目:11111010000
必要な出力:11011111010000
つまり、2番目の数字全体の前に、すべての1の後に1つの0(最初の数字)を置く必要があります。私の頭に浮かぶ唯一の考えは、最初の数字を2番目の数字の長さと同じ数だけ左にビットシフトすることです。そしてそれを合計するよりも。でも長さはわかりません。おそらく見つかるかもしれませんが、もっと簡単な方法はありませんか?
どうも
algorithm - 2 進数の反対数
2 進数の反対の数を取得したい (x--> -(x) および -(x) --> x を意味します)。
アルゴリズムは?すべてのビット(「1」を「0」、「0」を「1」)に変更し、それに「1」を追加することを考えました。大丈夫ですか ?
thnx
c++ - ブールデータを追跡する
n個のサンプルを追跡する必要があります。私が追跡している情報はブール型です。つまり、何かが真か偽かです。サンプルn+1に入るとすぐに、基本的に最も古いサンプルを無視して、最新のサンプルに関する情報を記録したいと思います。
だから私がサンプルを追跡していると言うと、私は次のようなものを持っているかもしれません
最も古い00110最新
次のサンプルが1の場合、これは次のようになります。
最も古い01101最新
次のものが0の場合、これは次のようになります...
最も古い11010最新
では、シンプルさとメモリの観点からこれを実装するための最良の方法は何ですか?
私が持っていたいくつかのアイデア:
ブール値のベクトル(これにはシフト要素が必要になるため、コストがかかるようです)ビットとして格納し、ビットシフトを使用します(メモリ的には安いですか?ただし、サンプル数に制限はありますか?)リンクリスト?(タスクにとってやり過ぎかもしれません)
アイデアと提案をありがとう:)
matlab - MATLAB: 最上位ビットを抽出する
私は MATLAB を学習しており、指定された double から最上位ビットを抽出するという問題に直面しています。getmsb 関数を見ました。しかし、5つの最上位ビットを言うことができる機能はありますか?
アニル。
hardware - 論理アドレスは何ビットですか?
わかりましたので、スタックを検索しましたが、この質問に対する答えが見つかりません。それは授業で言及されたものですが、教授はこれを理解する方法を具体的に述べていませんでした.
システムが 64 ビットで、物理メモリが 128 GB であると想定しているが、プロセスを 256 GB で実行したい場合、論理アドレスに必要なビットを計算するにはどうすればよいですか?
私がこれまでに行ったすべての調査は、2 ~ 4 GB の物理メモリを扱っていますが、これを計算する方法を一生理解することはできません。ページの移動とエントリを理解するには、これを知る必要があります...