問題タブ [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.
java - Java整数の整数が32ビットまたは64ビットすべてを使用しないのはなぜですか?
私は32ビットと64ビットを調べていました。±4,294,967,295
32ビットに格納できる整数値の範囲はですが、Javaint
も32ビットであり(誤解しない限り)、最大。までの値を格納することに気付きました±2 147 483 648
。についても同じですが、64ビットlong
からの値を格納します。これらの値はどうして違うのですか?0 to ±2^63
±2^64
c - 2の補数stm32c
「重要なバイト」の数値があります。0または255の可能性があります。
これは0または-1を意味します。
一度に255を-1に変換する方法。
私には機能しない関数があります:
java - なぜ2の補数と呼ばれるのですか?
重複の可能性:
2の補数、名前が「2」である理由
負の数を表すために符号ビットを使用するのはなぜ「2の補数」と呼ばれるのですか?そのような名前はどのようにして生まれたのですか、誰もが簡単な方法でそれを説明できますか、どうもありがとう。ちなみに、符号ビットを使わないということは、負の数を表現する方法がないということですか?申し訳ありませんが、ここで質問するのが大きすぎる場合は、これを頭の中で真っ直ぐに並べ替えたいと思います。さて、それはあまりにも厄介です。
c++ - 符号付きの 2 の補数表現で -INT_MIN = INT_MIN になるのはなぜですか?
最小の符号付き負数が同等の符号付き正数を持たない理由をまだ見つけていませんか? 簡単にするために 3 桁の 2 進数で表すと、100 は -4 になりますか? しかし、符号付き形式で正の 4 を持つことはできません。あふれます。では、2 の補数 1000 が -4 1000 0000 が -128 などであることがどのようにわかるのでしょうか? 元の正の数はありません
math - x86でのキャリー/オーバーフローと減算
x86でオーバーフローとキャリーフラグに頭を悩ませようとしています。
私が理解しているように、符号付き 2 の補数の加算では、フラグは 4 つの方法のいずれかでのみ生成できます (私の例は 4 ビットの数値です)。
- pos+pos = neg (オーバーフロー)
- 0111 + 0001 = 1000 (7 + 1 = -8)
- pos+neg = pos (キャリー)
- 0011 + 1110 = 0001 (3 + -2 = 1)
- neg+neg = neg (キャリー)
- 1111 + 1111 = 1110 (-1 + -1 = -2)
- neg+neg = pos (オーバーフロー & キャリー)
- 1000 + 1001 = 0001 (-8 + -7 = 1)
では、x86 アセンブリでは、A から B を減算すると、A と -B を加算した場合と同じフラグが生成されますか?
java - Long.toHexString(0xFFFFFFFF) が ffffffffffffffff を返す理由
これは私がJavaで見たものであり、私を困惑させます。
Long.toHexString(0xFFFFFFFF)
戻り値ffffffffffffffff
同様に、0xFFFFFFFF
とLong.parseLong("FFFFFFFF", 16)
は等しくありません。
c - ビットごとの関数のみを使用して、2 の補数を表すのに必要なビット数を見つける
int は 2 の補数で 32 ビットであると想定できます。正当な演算子は次のとおりです。〜&^ | + << >>
この時点で、私はブルートフォースを使用しています
... 最後の 2 つのステートメントが 32 回繰り返されます。これにより、x が 1 桁シフトされるたびに a に 1 が追加され、32 ビットすべてに対して != 0 になります。
テスト コンパイラを使用すると、テスト ケース 0x7FFFFFFF (0 の後に 31 個の 1 が続く) でメソッドが失敗し、この数値を表すには 32 ビットが必要であると表示されます。これが 31 ではない理由がわかりません (私の方法で計算します) 誰か理由を説明できますか? そして、これを説明するために何を変更する必要がありますか?
twos-complement - 2 '補数法で負の数を表現しますか?
2 ' の補数を使用して、負の数をバイナリ形式で表しています
ケース 1 :番号 -5
2' 補数法によると:
5 をバイナリ形式に変換します。
00000101
、次にビットを反転します
11111010
、次に 1 を追加
=> 結果:11111011
これが正しいことを確認するために、10 進数に再計算します。
ケース 2 : 番号 -240
同じ手順が実行されます。
私は何かを誤解していますか?
java - なぜInteger.MAX_VALUE+1 == Integer.MIN_VALUE?
System.out.println(Integer.MAX_VALUE + 1 == Integer.MIN_VALUE);
本当です。
Javaの整数は32ビットであり、2 31 -1を超えることはできないことは理解していますが、ある種の例外ではなく、MAX_VALUE
結果に1を追加する理由を理解できません。MIN_VALUE
Rubyのように、より大きなタイプへの透過的な変換のようなものについては言及していません。
この動作はどこかで指定されていますか?頼りにできますか?
java - String.format()およびJavaの16進数
私はなぜString.format()
それがそのように振る舞うのかを理解しようとしています。
コンテキスト:システムプログラミングクラス、アセンブラの記述。
オブジェクトファイルには5文字の16進フィールドがあり、値から作成しています。
使用してみました:String.format("%05X", decInt);
これは、正の数(11-> 0000B
)に対して意図したとおりに機能しますが、負の数(-1->FFFFFFFF
の代わりにFFFFF
)では失敗します。
最後の5文字の部分文字列を取得できると思いますが、それでも、なぜこのように動作するのかを理解したいと思います。