• ベストアンサー

printfの動作に関する質問

コンパイラ bcc OS WindowsXP HomeEdition 開発言語 C 変数tempを unsigned long temp; と、宣言して、 printf("%15ld",temp); で値を表示していくと、unsignedで宣言しているのに、マイナスの値が出現します。 tempは、unsigned longの定義域ぎりぎりまで使います。 多分、2の補数としてマイナスを表現している関係かと思いますが、この現象を回避する方法はないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • shkwta
  • ベストアンサー率52% (966/1825)
回答No.2

ldではなくluだと思います。 (uは符号無し十進数の記号)

shirousa01
質問者

お礼

回答ありがとうございます。 なにやら、大量に同じ意味の返信が来て困っていますが、一番早く正確な情報を下さった、この方にポイントを振って終了したいと思います。 参考としていたものに、整数型はdとしか書いてなかったので、今回uというものを教えていただき非常に参考になったと判断します。 殆どのサイトでもdとしか書いていないもので、dしかないのかと思っていましたが、まだまだあるものですね。

その他の回答 (3)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.4

printf("%15lu",temp); として下さい。

  • THX1138
  • ベストアンサー率51% (108/208)
回答No.3

No.1 です。 すみません間違えてました o ではなく u です。 o は octal の8進ですね こっちには MSDN の URL を貼っときます

参考URL:
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_crt_printf_type_field_cha
  • THX1138
  • ベストアンサー率51% (108/208)
回答No.1

書式指定子 d は符号付き整数用です。 符号なし整数の場合は o を使ってください。

参考URL:
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html#lbAK

関連するQ&A