2017-05-16 12 views
2

なぜ、〜177は-178となり、〜0177は-128となるのですか?0177対177およびそれらの相補物

前と後の値を印刷してみましたが、何も識別できませんでした。私はこの話題を説明することもできませんでした。私は "The C Programming Language"を読んでいます。

+5

'0'は8進表記の接頭辞であるためです。 –

+0

http://stackoverflow.com/questions/791328/how-does-the-bitwise-complement-operator-work – rsp

答えて

2

定数1770177は同じ値ではありません。前者は後者が8進数の10進数です。 C standardのセクション6.4.4.1から

は:

小数点定数はゼロ以外の数字で始まり、桁の配列からなります。 8進数の定数は、接頭辞0 と、0から7までの数字のシーケンスで構成されています。 16進定数は接頭辞0xまたは0Xと、それに続く十進数の シーケンスと、文字a(またはA)〜f(または F)(値10〜15)で構成されます。

小数定数の値は、基数10で計算されます。 、8進定数のもの8;語彙的に最初の数字が で最も重要です。

8進定数0177は127で小数点第4位です。 32ビットの16進値として、0x0000007fと表されます。この値に~演算子を使用すると、0xffffff80が得られます。負の数に対して2の補数表現を仮定すると、これは小数点で-128です。

3

先頭のゼロは、0177が8進数(127)であることを示します。

関連する問題