「$((〜33))」が-34を生成するのはなぜですか?

「$((〜33))」が-34を生成するのはなぜですか?
$ echo $(( 255 ))
255
$ echo $(( 33 ))
33
$ echo $(( ~33 ))
-34
$ echo $(( ~255 ))
-256
$ 

私のカーネルは次のとおりです

$ uname -a
Linux HOSTNAME 3.2.0-40-generic-pae #64-Ubuntu SMP Mon Mar 25 21:44:41 UTC 2013 i686 i686 i386 GNU/Linux

質問: ~数字の否定のためのAFAIK。しかし、なぜそして~33なぜ?-34~255-256

ベストアンサー1

Bashのマニュアルページは次のように述べています。

   ! ~    logical and bitwise negation

署名された番号は通常、次の場所に保存されます。2の報酬表現する:

...
-4 = 1100
-3 = 1101
-2 = 1110
-1 = 1111
 0 = 0000
 1 = 0001
 2 = 0010
 3 = 0011
...

つまり、2のような数字を取ると、ビット単位で0010と解釈されます。ビット否定をすると1101になりますが、これは-3を表現したものです。

おすすめ記事