私はコンピューターサイエンスの本で整数データ形式を学んでいますが、整数のバイナリ表現が正か負かに関係なく、左端のビット (msb) を正の場合は 0 または負の場合は 1 にすることを理解している限り、 8 ビットのコンピューターで、基数 10 で 10000010 - 130 について話しているのか、それともマイナス 2 について話しているのかをどのように知ることができますか? 間違っているかもしれませんが、もしよろしければ訂正してください。
2 に答える
どこかで文字列を見ただけだ10000010
としたら、わかりません... 壁か何かに書かれていますが、どうやってそれを解釈するかを知ることができますか?
これは 1000 万と 10 (基数 10 だと思っていた) と言うかもしれませんし、-126 (2 の補数バイナリだと思っていた) と言うかもしれませんし、正の 130 (と思っていた) と言うかもしれません)標準バイナリ)。
理論的な意味では、それがどのように解釈されるかは、解釈を行っているもの次第です。
したがって、コンピューターが 8 ビットのデータを保持している場合、それをどのように解釈するかはコンピューター次第です。
プログラミングをしている場合は、何かをどのように解釈したいかをコンピューターに伝えることができます。たとえば、C++ では
// char is 1 byte
unsigned char x = 130u;
ここでは、符号なしの130 を 1 バイトに入れるようにコンパイラーに指示したので、コンピューターはそれを値 130 として保存10000010
し、解釈します。
今考えます
// char is 1 byte
char x = -126;
ここでは、符号付き-126 を 1 バイトに入れるようにコンパイラーに指示したので、コンピューターは再び格納します10000010
が、今回は値 -126 として解釈します。
この質問に投稿された回答を見てください。
CPU はオペコードと呼ばれるものを使用して、メモリ位置 (この場合は値 10000010) を操作するときに使用する機能を決定します。それを負の数または正の数として操作するのは、CPU 内のその関数です。CPU は、数値が符号付きであるか符号なしであるかにアクセスできません。数値を操作するときに演算コードを使用して、符号付き演算か符号なし演算かを判断します。