tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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」に置き換える。

◆ 小さい場合
そのまま計算を進めて、答えを得る。


プログラム自体は敢えて書きません。
簡単ですので、ご自身で考えてみてください。
考えることはスキルアップするためには大事ですので。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。