それは期待する結果ではない。関数は少なくとも一部は思った通りの値として表示できる。つけてやれば、思った通りのビット表現を得られる。384など)をどのように計算するかである。ここで2の補数の定義を思い出す。CommonLispの整数値は無限に桁を持てるのだ。乗の整数は容易に求められる。大きな正の整数である。はやり正の整数である結果、”正の整数だが、Aの2の補数に相当するビット表現を持つ値”が得られる負の値のビット表現をおおむね思った通りにできる関数そうやって結論にたどり着いて最終的にできたものがこちら。display-value))))出力したものがこちらである。ビット値が、確かに反転した値とみえるうん。関数での負の値の表現を使用し続けることにした場合の脳内での計算方法について。ビット反転による2の補数の定義を使うことができる。する01001011これで何も問題ない。今回遭遇した負の値の表現に関しても、その現象が起こらないかなと思う部分がある。自分で書いたコードは、自分なりには努力したが、なんだか、おさまりがすごく悪いような気がしている。感覚なのでうまく言えないのだが、、、。仕様文書にも、いくつかのキーワードでの検索結果でも見つけられなかったことから見るに、検索性の悪い話題であることは間違いない。ないかということである。計算をしているときに「負の値のビット表現がほしい!」と思うだろうか?思わないと思う。そもそも16進数にせよ2進数にせよ、必要とされるのはビット演算がかかわってくる場合に限られるように思われる。ビット演算をしているときに、負の値がふつう現れるか?基本的には現れないように思う。今自分が思いつく限り、ビット演算を必要とする計算のほとんどは、正の整数のまま処理ができるように思われる。bit-vectorを用いるふとした瞬間に「負の値」が現れるのは、ビット反転を行ったときだけである。くどいようだがCommonLispの整数は無限に桁を持つことができ、有限桁数の値であれば正の数のまま処理ができる。唯一の例外が、ビット反転を伴う計算をした時である。上位側まで無限に続く1のビットを表現するために、内部的に負の整数となる値を得ることになる。負の値を負の値のままビット演算したいという場合は、どうしても無限に続いているということを意識する必要がある。注意して扱えばなんとかなる。反面、正の値のままで扱う方法もある。よる反転の代わりに、2の補数の計算をすることでそれができる。"0..0101001100"できるとは書いたが、私は使わないだろうと思う。ビット幅が制限されるのも、どうにも都合が悪い。型の宣言をすれば必要なかったりしないだろうか?終わりにこの調査を始める前に、ビット演算の方法を調査していた。出力がどうにもおかしいことに気付いた。その原因は何だと調べていたら、format関数とビット値の表現方法の問題だとわかった。思った通りの表示の方法を得るために、工夫をした。この記事の内容は、実用的にはおそらく必要性が低いと思われる。読み物として楽しんでいただければ幸いである。返事は遅くて内容もお礼だけになる気もするが、、、コメントいただければ幸いである。HackerRankを愛用している。その挑戦の中で、ビット演算を必要とする問題があり、いざどのようにするかを調べてみたのだが、最初探し方がまずくて見つけられなかった。いうか、最近真っ先に逆引きCommonLispを参照するクセをつけているのだが、探して見つからなかった。いうわけで、調べ、おおむね逆引きにまとめたのだが、整数が”無限の長さを持つ”ことによる”負の整数のビット表現”でドはまりした。やってみるとパズル的で面白いのだが、初めて使った人は同じ罠にはまらないかな、、とも思った。初心者バイバイ感あった。書いたことの報告を書く。あまりに長くなったので分けた。行うこちらはまだ試していないのでこの記事にも逆引きにも書かないライブラリや実例のリンクだけ。ビット演算をつかっておられます。lognotなどビット演算処理が一通りそろっている。関数はlog関数と同じことを「オペレータを指定して」できる。ほうが少し処理の種類が多い。なんとなく、遺伝プログラムとか人工知能などといったプログラム生成の論理処理用に作られたのでは?と想像した。データとして演算が扱えるということで。逆引きのビット演算の項目の中に一緒に書いた。ついてはそこまで調べていない。違うけど、、ああ、、、符号部と整数部が分かれて表示されているのか、、、これは、、仕様っぽい、、、しょうがない、ちょっと考えるか、、、そういうわけでいろいろ考えた結果、負の整数値でもビット値として表示できる次の関数を作ってみた。ビットがあることを表現しているつもり。ビット反転の値と反転前の値の桁数が現状そろわない固定桁数での表示をしたいなどいくつかの自分ニーズに応えられていないので、今後の改良が待たれる。