タイトル : Re: 32ビット正数を扱う 投稿日 : 2010/10/17(Sun) 21:52 投稿者 : ミッキー
Mod演算子(Mod 関数ではありません)について、 マイクロソフトのサポート情報によると、 Mod 演算子は整数演算のため、演算前に自動的に 整数に変換されるとのことです。 http://support.microsoft.com/kb/q205053/ 上記の日本語サイトは、英語版を自動翻訳しているため 翻訳がおかしな部分がありますので、英語版(下のリンク)を 読まれた方がいいです。 http://support.microsoft.com/kb/205053/en-us/ ですので・・・ > double符号付8バイトなので変更したところ、 > MOD関数が処理できないようです。 Double型だから処理できないのではなく、 Long型に変換したときにオーバーフローするから処理できないのです。 Double型でも Long 型に収まる範囲の値であれば処理できます。 あと、 > 32ビット正数(0〜4294967295)を2進数表記するソフトを作成。 とありますが、投稿されたプログラムをはしらせると、 2進数表記を逆にした数値になると思いますが、これは正しいのですか? たとえば、10進数「123」を2進数にしたときの値をA、 このロジックを使って計算した結果をBとすると、32桁で表記すると A 0000 0000 0000 0000 0000 0000 0111 1011 B 1101 1110 0000 0000 0000 0000 0000 0000 となりますが、これはこれで正しいのですか? > プログラムを実行させるにはどのようにすればよいでしょうか。 1つの手法として参考にしてください。 ltmp を Double型として、Itmp に代入された値が (2^31 - 1) より大きいかチェック ◆ 大きい場合 (2 ^ 31 - 1) を引いた値を2進数にする。 得られた2進数を文字列として扱って、 計算後に先頭1桁の「0」を「1」に置き換える。 ◆ 小さい場合 そのまま計算を進めて、答えを得る。 プログラム自体は敢えて書きません。 簡単ですので、ご自身で考えてみてください。 考えることはスキルアップするためには大事ですので。 |