新井です。 In message "[ruby-dev:16537] Re: sprintf("%u")" on 22 Mar 2002 12:34:35 +0900, matz / ruby-lang.org (Yukihiro Matsumoto) wrote: > まつもと ゆきひろです > あ、10進では負だからといって決まった整数の連続にならないので、 > ..に意味がないという話かもしれませんね。それは一理あるので直 そうです。言葉が足らなかったようですね。申し訳ないです。 > したいのですが、となるとどのような表示が適切かというのは良く > 分かりません。 > > * そもそも%uに負の数を指定するほうが悪い。例外。 > * なんらかの方法で正の数に変換して出力 > * その他 > > くらいが戦略でしょうが、後二者については具体的にアイディアが > ないですねえ、とくに10進について。 2の補数表現で最上位ビットが無限に続く数値に対して符号無し整 数を要求するというのば、利用者の意図は引数を固定長の整数とし てみなしたいのだと想像します。 なので、安易に Ruby の内部表現のサイズの整数を符号無しにして しまえばと思ったのです。はっきりいって現状でそういう出力をし てますよね。(".."が頭につくことを除けば) 幸い内部表現のサイズは size メソッドで公開してますし、あまり 抵抗は感じないなと思ったのです。 n = -10 ** 10 p "%u" % n p "%d" % (n & ~(-1 << (n.size*8))) => "..18446744063709551616" "18446744063709551616" まあ、そもそも %u なんていらないという説もありそうですが。 -- 新井康司 (Koji Arai)