問題タブ [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.
computer-science - なぜ2の補数?
私は子供たち(9歳から13歳)にプログラミングについて教えるためのチュートリアルを書いています。私はコンピューター自体から始めました。コンピューターサイエンスとはあまり関係がありません。それは、計算問題の解決に関連するプロセスに関するものです。
その出発点で、私は機械が特定の計算問題で私たちを助けることができるという理解に向けて彼らを導きます。人々は抽象的な思考と想像力に長けていますが、コンピューターは明確に指定されたルーチンに従うのに優れています。彼らは驚くべきスピードで何度も何度もそれを行うことができます!
バイナリ形式での数値の表現については、私のチュートリアルですでに説明しています。しかし、負の数をどのように表現しますか?これを行う方法は、どの表記法でも非常に多くありますが、コンピューター用に選択されたシステムは、非常に特殊な理由からです。符号付き整数値の追加に関連する機械の量を減らすためです。負の数を処理するためだけに個別のチップを作成して構築する必要はありません。自然数の演算に使用していたのと同じチップを使用したいと思います。
誰かが路上であなたに尋ねた場合(これは完全に非現実的です)、「コンピューターはどのように負の数を表し、なぜそれらはこのように表すのですか?」
私の具体的な質問:
コンピューターはどのように負の数を表しますか?
なぜコンピューターはこのように負の数を表すのですか?
この多くの経験豊富な開発者は、これについて少し考えなければならないと思います。答えを思い付くことができない人もいるかもしれません。私は派手になろうとはしていません。これは実際の経験によるものです。プロの開発者にこの質問をしましたが、彼らはそれに答えることができません。彼らは空白の凝視を描きます。それらにJBossとJavaBeansを与えると、彼らは自信を持ってあなたをスチームロールします。とても面白い!私もこの質問に苦労しています。毎回答えを思い出さなければなりません。解決策を見つけるには、紙またはホワイトボードが必要です。私が望んでいるのは、生徒が使用している機械をよりよく理解できるように指導することです。
binary - 2の補数の加算の問題
2の補数の加算に取り組んでいます。基本的に、-27から+31までの加算を示す必要があり、両方の数値は6ビットを使用して2進数になっています。
私の問題はキャリー操作にあります。多分私はそれを正しくやっていないか何かをしていません。
-27はバイナリです:111011
+31はバイナリです:011111
私が思う答えは次のようになります:
+4はバイナリです:000010
これが私がしていることです:
私の考えでは、これは4ではなく52に計算されます。
私は何が間違っているのですか?
java - Java FileInputStream からバイトを読み取るときに、-1 と 0xff をどのように区別しますか?
そのため、単純な XOR 暗号化を実行するミニアプリを作成する必要がある就職の面接のテストを受けなければならず、この質問に出くわしました。FileInputReader を使用して各バイトを取り込み、キーを使用して XOR 演算を実行し、結果を FileOutputStream にプッシュしました。これが私が考えさせられたものです。
FileInputStream は、32 ビットの符号付き型である int を返します。1 バイトしか受信しない場合は、「バイト」型にキャストできます。FileInputStream は、EOF に達した場合も -1 を返します。しかし、2 の補数バイナリでは -1 == 0xff であり、読み取ったバイトが EOF ではなく、実際に 0xff である場合はどうなるでしょうか?
0xff は、特別な場合 (EOF など) を除いて数学的に返されないバイトですか? それとも、これは、読み取っているデータによっては考慮しなければならない状況ですか?
math - オーバーフローしない 2 の負の整数 (2 の補数) の減算
私はコンピュータアーキテクチャの教科書でこれに出くわしました:
厳密に負の整数を別の厳密に負の整数 (2 の補数) から減算しても、オーバーフローすることはありません。
教科書は、この主張を説明し続けていません。それは私の好奇心を刺激しました。
この記述が正しいのはなぜですか。
java - Javaで32ビットの16進数を10進数に変換する
割り当てのために、8文字の文字列(16進数)を受け取り、それを基数10に変換するプログラムを作成する必要があります。これを行うために外部クラスを使用することは許可されていません。私はそれが適切に機能していると確信しています...正の数のみ。私の問題は、負の数を表示する方法です。例として、FFFFFFFA は -6 として出力される必要があります これはこれまでの私のコードです
負の整数のテストは正しいと思います...それは32ビットが保持できる最大値であるため、それを超えるものはオーバーフローになるため、負になる必要があります。ここから、私はこれについてどうやって行くのか分かりません。ポインタやヒントをいただければ幸いです。数学的にそれを行う方法がない場合は、16 進数を 2 進数に変換してから 2 の補数を実行する必要があるように感じますが、どこから始めればよいかわかりません。
前もって感謝します
bit-manipulation - 16ビット浮動小数点半精度数を加算および減算する方法は?
16ビット浮動小数点半精度数を加算および減算するにはどうすればよいですか?
足し算または引き算が必要だとしましょう。
1 10000 0000000000
1 01111 1111100000
2の補数形式。
binary - 16進数を2進数に変換し、16ビットで1と2の補数を変換します
FFAD(16進数)を10進値に変換してから、1と2の補数を実行しようとしています。FFADは16ビット整数として表されます。FFADを2進数に変換すると、1111111110101101になります。
私の問題は、それが負の数であるかどうかをどうやって知るかです。
私はバイナリを持っています。通常は1の補数を実行するために、最後のビットを0から1に変更してからすべてのビットを反転しますが、16ビット整数として使用可能なビットはありません。16番目のビットは1なので、それは負の数であることを意味しますか?それをどのように補完しますか?私はこの問題に混乱しているだけであり、どんなポインタでも大歓迎です。
binary - 負の数は2の補数としてメモリに格納されますが、CPUはそれが負か正かをどのように認識しますか?
-1は、4ビットのバイナリで(2の補数)1111として表すことができます。
15は1111としても表されます。
では、CPUがメモリから値を取得するとき、CPUは15と-1をどのように区別しますか?
twos-complement - 2 の補数表現に必要な最小ビット数
2 の補数システムの最小ビット数で-1
どのように表現できるかを調べる必要があります。答えを-3
計算しましたが、答えが間違っているようです。少しでもお役に立てれば幸いです。ありがとう1
111
java - バイト[]の2の補数で表される整数のサイズ変更
バイト配列に数値の2の補数表現があり、それを拡張してより大きなバイト配列を使用したいと思います。byte[]
(sから2の補数を得ることができますBigInteger
)
したがって、私の新しいバイト配列は同じ符号ビット(つまり最上位ビット)を持っている必要があり、それから他のすべてがシフトされます。
それで:
私は正しい方向に進んでいますか?頭を動かすのに問題があります。バイト長の16進リテラルが機能します。または、16進リテラルのサイズをintサイズにする必要がありますか?もしそうなら、私は自分のすべてをキャストする必要があります。
そうです:
同等ですか?