コンピュータでは、符号付き整数を内部的に表現するために2の補数を使用しています。すなわち、-5は、^ 5 + 1 = "1111 1011"と表される。しかし、バイナリ表現を印刷しようとする。次のコード:Golang:2の補数とfmt.Printf
var i int8 = -5
fmt.Printf("%b", i)
出力-101
。私が期待しているものではありません。結局のところフォーマットが違うのか、結局2の補数を使用していないのでしょうか?
興味深いことに、 "正しい" のビットパターンにunsigned int型の結果への変換:
var u uint8 = uint(i)
fmt.Printf("%b", u)
出力する11111011
ある - -5
の正確に2の補数。
値は内部的には2の補数を使用していますが、書式設定では符号なし5
と、プレフィックスは-
です。
誰かがこれを明確にすることはできますか?
誰もがなぜこの「奇妙な」と考えるのか分かりません。どんな数の基数を使用しても、負の数は依然として負の値です。あなたがベース8、12または16でそれを求めたら、私は同じことを期待しています。 –
さて、私は変だとは言わなかった。私は2の補数を理解しようとしていただけで、結果は私が期待していたものではありませんでした。 – joerx
高水準言語で書かれた数値書式化関数を使って2の補数を理解することは本当に望めないと思います。 –