問題タブ [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.
twos-complement - 足し算、引き算、左シフトを使用して2の補数の符号を反転する
宿題の課題で、質問の1つは、+、-、および<<演算子と、最大3つの演算のみを使用して、任意の整数に定数を掛けることを求めました。たとえば、最初の定数は17でしたが、これを次のように解きました。
ただし、指定された定数の一部は負でした(-7など)。7を掛けるのは比較的簡単なことですが(私はそれを持っています(x << 3) - x
)、許可された3つの演算子だけを使用して符号を反転する方法を理解することはできません。
すべての結果に2147483648を加算または減算することでそのビットを反転しようとしましたが(これにより最上位ビットが強制的に使用され、符号が反転するという考えで)、C#でのテスト実装では、これは失敗しました。
-7に機能的に類似する特定のintを乗算できる正の数はありますか?2147483648を追加すると、C#以外の言語で機能しますか?私は何かを見落としていますか?
本からの元の質問は以下の通りです:
整数変数xにさまざまな異なる定数係数Kを乗算するコードを生成するタスクが与えられているとします。効率的にするには、演算+、-、および<<のみを使用します。次のKの値については、式ごとに最大3つの演算を使用して乗算を実行するC式を記述します。
A. K = 17
B. K = -7
C. K = 60
D. K = -112
binary - 4ビットのビットパターンを見つける #
a. 次の 4 ビットの数値のビット パターンを入力します。1 つの数値に複数のビット パターンがある場合は、それらすべてを記述します。ビットパターンが存在しない場合は、ボックスに「N/A」と記入してください。
符号なし、符号/大きさ、1 の補数、2 の補数
0、7、-1、15、および 8 の場合。
0、-1、15 を計算しました。
7と8で助けが必要です。
binary - 2の補数の説明
2の補数はどのように機能しますか?例えば:
後者が251であるか-5であるかをどうやって見分けることができますか?
c - ビット演算子のみを使用してバイナリで算術演算を実行する
ループ制御以外の算術演算子を使用せずに、2進数の減算、乗算、除算を実行する関数を作成する必要があります。私は今までJavaでコードを書いただけなので、これに頭を悩ませるのに苦労しています。
減算から始めて、プロトタイプで関数を書く必要があります
yを負にしてxに加算するには、yを2の補数に変換する必要があることはわかっていますが、これを行う方法は、1の補数〜演算子を使用して1を加算することによってのみわかりますが、+演算子は使用できません。
badd関数が提供されましたが、yaを負の数にする方法がわかれば、bsubで実装できるようになります。baddのコードを以下に示します。ヒントを事前に感謝します。
binary - 論理ゲートを使用した符号付きバイナリコンバータの2の補数?
ゲート回路を使用して、符号付きバイナリコンバータの2の補数を作成する必要があります。どの論理ゲートを使用できますか?
c - b=5 の場合、なぜ ~b=-6 なのですか?
2 の補数の計算がうまくいきません。
C が b=5 の場合にすべてのビットを -6 に反転する ~b をコンパイルすることを知っています。しかし、なぜ?
int b=101、すべてのビットを反転すると 010 となり、2 の補数表記では 1 を足すだけですが、それは 011、つまり 3 となり、不正解です。
ビット反転演算子 ~ でどのように計算すればよいですか?
c# - 16進文字列の2の補数チェックサムを計算します
文字列「0AAE0000463130004144430000」があり、文字列を構成する16進バイトの2の補数チェックサムを計算する必要があります。
上記の文字列の例の式は次のとおりです。
- 値を合計します:0A + AE + 00 + 00 + 46 + 31 + 30 + 00 + 41 + 44 + 43 + 00 + 00 = 27(オーバーフローを破棄します)
- 0x100=0xD9から結果を減算します
D9はこの例の正しいチェックサムですが、C#の文字列から2桁の16進値を解析するのに問題があります。私の現在のコードは以下の通りです:
ただし、これは私が知る限りASCII値を合計し、個々の文字ごとにそれを実行しています。
java - 2つの補数で16進数から10進数を理解する - Java
ここでこの答えを理解しようとしています。
0xf2
これらと0xfffffff2
値の両方がどのように表され-14
ますか? 変換プロセスについて詳しく教えてください。
ただし、2の補数とは何かは知っています。
java - Javaで2の補数バイトを符号なしの正の値に変換します
Javaに8ビットのバイト配列があります。バイト配列は、外部センサーから受信する16ビット数の上位バイトと下位バイトで構成されます。
たとえば、バイト配列は次のようになります。
上記のバイト配列では、各偶数インデックスは16ビット数の上位バイトであり、各奇数インデックスは下位バイトです。
私が抱えている問題は、数値が127を超えて、数値の2の補数表現が優先される場合です。私が本当にやりたいのは、POSITIVEの符号なし番号を保持することです。したがって、2の補数は気にしません。これが私が成功せずにやろうとしたことです。
8ビットの数字を符号なしにするためにshortに変換しようとしましたが、Javaは先行0の広告を切り捨てて8ビットとして扱い、負の符号を保持しているようです。誰かがおそらくより良い方法を知っていますか?
##編集:それが重要かどうかはわかりませんが、これはAndroidで実行されているアプリケーションであることに言及する価値があるかもしれません。##
乾杯、