2012-01-09 21 views

答えて

8

すべてのビットを2の補数の整数に設定すると、-1が得られます。

私は2の補数を使用して(非常に小さい)、2ビット符号付き整数で示してみましょう:

00 → 0 
01 → 1 
10 → −2 
11 → −1 

これはわずか1から-2オーバーフローを越え、0からカウントアップし、で終わる-1 。ご覧のように、0になるすべてのビットをクリアすると、それらをすべて設定すると、(整数の幅にかかわらず)-1が得られます。

+1

"BASICを使用している人"私は正式には覚えがたいです。 – BoltClock

+1

少なくともVisual Basic 6まで、これは私が正しく覚えていればそうでした。 VB.NETはブール型と同様に 'AndAlso'と' OrElse'を短絡しました。 – Joey

5

ゼロが実際にあることを

は(というのは本当である以外何のブール演算子や物事は、ビット演算子と同じようにうまく動作しない代わりに-1 1のがあったとして、あなたの心には、BASICを使っている人は、すでにこれを知っていました) PHPの整数型は、32ビット符号付き整数ではなく、単一ビットであるように、32個のゼロビットで表現される:
0000 0000 0000 0000 0000 0000 0000 0000 

はそうではないと(-1のtwo's complementもたらすそれらの全てを、反転ビット単位

記号を表す最も左のもの):

1111 1111 1111 1111 1111 1111 1111 1111 
+4

1つのビットがすべて-1である理由が分からない場合は、自分自身にこれを尋ねてください。それに1を加えるとどうなりますか?回答:オーバーフローし、すべてのビットがゼロです。あなたがそれに1を加えたときにゼロになる数字の名前があります... -1。 –

+1

David、これは2の補数に当てはまりますが、符号ビットや1の補数には当てはまりません(少なくともnaïvelyではない)。いずれのオプションも、コンピュータを親密に知らない人の立場からも同様に説明することができます。 – Joey

2

は、はいそれが必要、と2の補数システム上、設定されたすべてのビットの数は、-1に等しく、0が未設定のすべてのビットを持っているので、〜そのすべてのビットがセットされています$。

したがって、コードは期待どおりに動作しています。

0

整数は2の補数形式で格納されます。

このフォームは、アウトライン広告は、次のことができます:

1)保存する番号はそのバイナリ値は

例えば $ valの= 5保存され、その後正の値である場合には、ここで

は$ valがのordiaryバイナリequivlentを含有する5 = 0101 //ビットの数は、具体的

2)あなたは、数の負格納されているならば、補数の賛辞Sが格納され、-5言うに依存

ここで最初の
$val = -5; 

5の2の補数、すなわち、5 + 1

~ 0101 = 1010 

tnenの単に1の補数は1

追加して発見されました
1010 + 
    1 
    ----- 
    1011 

この1011は$ valに格納されます。

同様に、$ val = 0; 00の-2 2の補数形式で

equalientであり、あなたは慎重に観察する場合には、最終的に、あなたは、

を求めることができるので、どのように、私は11を表すことができ

〜$ valの=> 11に格納されます?そのバイナリ値は2のcompで-5の値と衝突する1011ですか?

答えは数字を表すのに使用されるビットの数にあります。 2のcomplimwent形式で

n個のビットがあるならば、あなたはそれがない

-2^(n-1) to 2^(n-1) -1 ; 
関連する問題