0
ハッカーズ・ディライトのchapter 2を読んで、Erlangでビット操作を実装しようとしました。Erlangのbitwise bnot演算子を使用したビット操作
私はこの1つ上のこだわっている:
例えば10100111(なした場合、すべての1年代を生産、0の末尾の1×での、1の他の場所の位置でと単語を作成するには、次の式を使用します=> 11111000):ここで
¬ x | (x + 1)
は、私が試したものです:
(bnot X) bor (X + 2#01)
しかし何らかの理由で-1000
の結果があり、2#11111000
ではありません。
not 2#10100111
は-10101000
(ベース2)です。
何が起こっているのでしょうか?
-1000は、読んでいる方法によっては、2#11111000と同じことがあります。あなたはそれが本当に異なっていることを確認できますか? – harold
Erlangは整数のサイズを制限しないため、符号ビットの固定位置はありません。正の数の前に無限のゼロがあるように、負の数は無限の接頭辞を持つものと見なされます。したがって、bnot 2#0001は2#... 1110(-2、2の補数)、bnot 2#0010は2#... 1101(-3の2の補数)などです。 bsl(W-1) - 1の場合、結果をWビットで正の数に切り捨てることができます。 – RichardC
@リチャードCこれを回答にすることができますか? '2#... 1101'が' -4'であることを意味しましたか? '101'は4なので?あるいは、私は何かを誤解しているでしょうか? – drozzy