(質問訂正)Pythonにおける2進数の扱いが変だと感じるのは私だけでしょうか。



>>> format(31,"06b")
'011111'
>>> format(-31,"06b")
'-11111'
>>> format(32,"06b")
'100000'
>>> format(-32,"06b")
'-100000'

マイナスが2の補数表現でなく単にマイナス符号を付加しただけと言う点は良いとしても、
マイナス時、その数の絶対値を2進数で表したときの最上位ビットが0の場合は最上位ビットが省略されてしまいます。


奇妙だと思いませんか?
なぜこの様な仕様になっているのでしょうか。
Pythonの仕様に詳しい方はご回答お願い致します。



※質問内容が不明確で、かつ誤りがありましたので訂正して再投稿しました。

回答の条件
  • 1人5回まで
  • 150 ptで終了
  • 登録:2010/01/29 16:09:41
  • 終了:2010/01/30 17:44:18

回答(7件)

ただいまのポイント : ポイント6 pt / 150 pt ツリー表示 | 新着順
2進の扱いがおかしいわけではないのです mystashes2010/01/29 20:42:54ポイント2pt
formatの役割を勘違いされているのではないでしょうか。 format(-31,'06b') の意味は、数値-31を2進数表記にして”6文字で”表示せよ。です。あくまで文字列操作です。 2進の6bitと解釈せよ、という意味は全く含まれません。bit ...
理解できました。 spendarmad2010/01/29 22:06:17
>format(-31,'06b') の意味は、数値-31を2進数表記にして”6文字で”表示せよ。です。あくまで文字列操作です。 >2進の6bitと解釈せよ、という意味は全く含まれません。bit幅は渡された数値の型依存です。 なるほど!確かによ ...
Cのprintf くない / あしけ2010/01/29 17:33:34ポイント2pt
例えばCのprintfは確か「最小文字数」という意味で桁数の意味は無かったはずです。おそらくformatの文字数指定は等幅フォントにおける表の作成を想定しているものなので桁数より文字数が重視されるのは仕方ないと思いま ...
そうでしょうか? spendarmad2010/01/29 18:59:13
>等幅フォントにおける表の作成を想定している もしそうなのであれば、 format(-32,"06b") の返り値が7文字なのに、 format(-31,"06b") の返り値を無理やり6文字に納めようとするのは何故でしょうか。
逆に くない / あしけ2010/01/29 21:41:27ポイント1pt
format(-31,"06b")の挙動までが正しくて、format(-32,"06b")の結果は桁あふれだが、文字列を切り捨てるわけにもいかないので伸ばしているだけ、ということだと思います。
たとえばperlでは dev_zer02010/01/29 16:41:22ポイント2pt
下記のPerlソースはコメントの通りの結果になります #!/usr/bin/perl printf("%03d\n", 100); # 100 printf("%03d\n", -100); # -100 printf("%03d\n", 10); # 010 printf("%03d\n", 10); # 010 printf("%+03d\n", 100); # +100 printf("%+03d\n", -100); # -100 printf("%03d\ ...
うーん spendarmad2010/01/29 18:54:21
>printf("%03d\n", 10); # 010 >printf("%03d\n", 10); # 010 printf("%03d\n", -10); ならどうなるのでしょう? >ちなみに、どのような結果が返れば納得するのでしょうか? 2の補数表現は置いておいたとして、 >>> format(-31,"06b") '-0111 ...

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません