問題タブ [twos-complement]
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.
decimal - 16ビットを使用して10進数を2の補数に変換する
問題:
16ビットを使用した2の補数の10進数-234は何ですか?
234をバイナリに変換する必要がありますか?
javascript - 符号付き 10 進数を 2 の補数でエンコードされた 16 進数に変換します
2 の補数表記を使用して、符号付き整数を 16 進数としてエンコードする必要があります。たとえば、変換したい
これまでのところ、次の行に取り組んできました。
これは Wolfram Alphaが表示するものと一致しますが、数値の符号付き 24 ビット int 表現 (ffffa0c9) を取得する方法がわかりません。
符号なしの 2 進数を取り、これを 2 の補数として表す方法を考え出しました。
しかし、この数値のバイナリ表現を取得して16進数に変換できるかどうかはわかりません。
何か案は?
c - 普通の char は通常/常に非 2 の補数システムで符号なしですか?
明らかに、標準はこれについて何も述べていませんが、私は実用的/歴史的な観点からもっと興味がありchar
ます. そうしないと、null ターミネータの 2 つの表現や、すべての「バイト」値を表現できないなど、あらゆる種類の奇妙さが潜在的に発生しますchar
。この奇妙なシステムは本当に存在しますか?
hardware - 「2の補数」というハードウェアユニットはありますか?
減算を行うには、2の補数を2番目の数値に変換する必要があることを理解しています。MSBをチェックするための専用ハードウェアはありますか?それが1であることが判明した場合、変換を実行しますか?
また、このシステムは浮動小数点の減算に使用されていますか?
assembly - sra(右シフト算術)vs srl(右シフト論理)
次の2つの疑似アセンブリコードを見てください。
1)
2)
最初の場合、出力は次のようになります
。212
13
13
後者の場合:
-212
107374 ...
-14
しかし、すべきではありません:sra(-53)=-(srl 53)?
twos-complement - ビットが 1 の補数で反転されるのはなぜですか?
2 の補数に 1 を加算する前に 1 の補数で負の数を格納する場合、符号以外のすべてのビットが反転されるのはなぜですか? 違うのが記号だけだったらもっと簡単だと思います。私が考えることができる唯一の理由は、何らかの形でコンピューターにとってより簡単になるということです。
binary - 手作業による2の補数の乗算?
MIPS乗算を手作業で解決する必要があり、問題が発生しています。
$8
-1073741824の2の補数表現(2 ^ 30)を保持する2つのレジスタが$9
あり、+ 3の2の補数を使用して、このMIPS命令の結果を見つける必要があります。
私はかなり迷っています。最初に値を2の補数に変換してから、2進乗算を使用する必要がありますか?
c++ - 未知のビットサイズの2つの値を減算する
2つの補数を使用して2つの値を互いに減算しようとしています。オーバーフロービットに問題があります。私のコンテナは無制限のビットサイズの整数を保持しているので、結果の一番上のビットが本当に結果からのものなのか、それとも単にオーバーフローからのものなのかわかりません。使用せずにオーバーフローを取り除くにはどうすればよいですか(まだ機能していないコンテナを使用する必要があるため、-
私はそれを行うことはできません)1 << bits - 1
operator-
0b1111011111 - 0b111010000 -> 0b1111011111 + 0b000110000 -> 1000001111
vs(通常)
0b00000101 - 0b000000001 -> 0b00000101 + 0b11111111 -> 0b100000100 -> 0b00000100
java - Javaでは2の補数の16進数を10進数に
2の補数を表す16進文字列があります。ビットを直接操作せずに16進数を10進数に変換する簡単な方法(ライブラリ/関数)はありますか?
EGこれは、左側の16進で期待される出力です。
ありがとう!
integer - VHDL 補数カウンターの問題: std_logic を整数に変換する
本質的に、私の質問は次のとおりです。「これ」とは何か、以下に続きます(コードも):
VHDL で実装された一種の「補数」カウンター関数が必要でした。これは基本的に、各ステップでカウンター値を反転/補数/非反転し、テスト用に少しリッチなビット パターンを提供します。もちろん、私はこれを合成可能 (カウンター値をピンに割り当てることができるようにするため) および移植可能なコード (つまり、IEEE ライブラリのみを実装し、いいえSTD_LOGIC_ARITH
) にしたかったのです。また、デフォルトですべてを署名なしとして扱いたくありません(したがって、避けたいと思いSTD_LOGIC_UNSIGNED
ます)。
簡単に言うと、このカウンターは次のように説明できます。初期値 C[0] が与えられた場合、各クロック ティックでの値は次のようになります。
... または、C が 16 ビット幅の場合 (符号なし Cmax = 65535 および Cmax/2 = 32768 になります)、次のように書くこともできます。
ここでの秘訣は、カウンターが 1 回だけインクリメントする必要があることです。カウンターが補完的な範囲と「通常の」範囲の両方で増加する場合、変更は発生しません (式は 2 つの値の間で「振動」します)。
したがって、チェック C[i]<(Cmax/2) は C の最上位 (15 番目) ビットをチェックすることと基本的に同じであるため、次のようなものを使用して VHDL でこのようなものを簡単に実装できると考えました。
少年、私は「簡単に」について間違っていました:)
最初の問題は、上記の式が 65535+1 になる可能性があることです。この場合、結果には 17 ビットが必要になります (つまり、オーバーフロー)。私の場合、「キャリービット」を切り捨て/無視したいだけです。
これは、何を使用するかという問題につながります。
std_logic_vector
補数がnot()
定義されています。+
しかし、 (追加)が定義されていませんnatural
/integer
内部で 32 ビットを使用する場合があるため、それらのビット幅は必ずしも指定されていません。算術はサポートしています+
が、補数はサポートしていませんnot()
- 私も試してみ
unsigned
ましたが、いくつかの問題もありました(どれを思い出せません)
15 番目 (MSB) のビットは、Y が の場合にのみ抽出できますstd_logic_vector
。この場合、Y(15) は単一ですが、それ以外の場合は加算が定義されていないため、型にstd_logic
変換する必要があります。integer
+
したがって、私の現在のソリューション (以下) には、最初にカウンター レジスタの 2 つのコピーがあります。一つはSIGNAL wCntReg : STD_LOGIC_VECTOR(15 DOWNTO 0)
; もう一つはSIGNAL tmp_na : natural
。それで:
- 2 つのクロックがあります。1 つは「マスター」@ 50 MHz、もう 1 つは「カウンター」クロックです。マスターは 16 倍に分周された周波数 (3.125 MHz) です。
- 「カウンター」クロックは、立ち下がりエッジでカウンター値の計算をアクティブにする必要があります
- 計算は
natural
変数を介して実行されます(変数からコピーされますSTD_LOGIC_VECTOR
) - どうやら、最初に変換された場合に
std_logic
のみ変換できるようです(ネットで関数を見つけることができて幸運でした)。integer
std_logic_vector
vectorize
ここで最も厄介な部分は、natural
変数値をフィードバックする方法でしたSTD_LOGIC_VECTOR
。私が作成できる唯一の機能するコマンドは次のとおりです。
...; ただし、このコマンドは基本的に値を「設定」することに注意してください。この値は、次に同じコマンドを実行したときに「有効」になります。したがって、「カウンター」クロック プロセスでは実行できません。以下のコードでは、より高速な「マスター」クロック プロセスで実行しています。
最後に、以下のコードは機能します (ISE WebPack でビヘイビア シミュレーションを実行します) - しかし、これを解決するためのより簡単な方法があるかどうかを知りたいです。
ご回答ありがとうございます。乾杯!
コード: