none
算術演算の結果オーバーフローが発生しました。 RRS feed

  • 質問

  • はじめまして。mep1と申します。
    PCは下記のものを使っております。
    OS:Windows Vista Home Premium
    開発環境:VB2008 Express SP1

    上記の環境で次のコードを実行すると「算術演算の結果オーバーフローが発生しました。」というメッセージが表示されます。
    --------------------------------------------
     Dim Result As Integer
     Dim Data1 As Byte
     Dim Data2 As Byte

     Data1 = 100
     Data2 = 200
     
    Try
       Result = Data1 * Data2
    Catch ex As Exception
       MsgBox(ex.Message)
       Exit Sub
    End Try
    --------------------------------------------
    エラーの切り分けとして、変数のData1,Data2のどちらかをInteger型にすることでエラーを出さずに正常に乗算できることがわかっております。
    何故例外エラーが発生するのかご存じの方は教えて頂けますでしょうか?

    よろしくお願いいたします。

    2009年4月24日 12:42

回答

  • 式 Result = Data1 * Data2 の右辺が Byte 型として計算されるからです。
    • 回答としてマーク mep1 2009年4月25日 9:48
    2009年4月24日 12:55
  • 一度以下を読まれておくと良いと思います。

    3-4-1 VB .NET の演算子
    http://msdn.microsoft.com/ja-jp/library/dd314346.aspx

    --- 引用開始 ----------------------------------------
    原則として計算結果は、もとの計算対象項目と同じデータ型で算出されるか、またサイズが異なる複数のデータ型を 1 つの計算式で使っていた場合は、最もサイズが大きいデータ型で算出されます。
    --- 引用終了 ----------------------------------------


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク mep1 2009年4月25日 9:49
    2009年4月25日 1:36
    モデレータ

すべての返信

  • 式 Result = Data1 * Data2 の右辺が Byte 型として計算されるからです。
    • 回答としてマーク mep1 2009年4月25日 9:48
    2009年4月24日 12:55
  • 原因は既に回答があるのでさておくとして、Integer型に一時的にキャストすると言うことで、CIntとか使うと良いかもしれません。

    http://msdn.microsoft.com/ja-jp/library/dd314347.aspx
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年4月24日 14:54
    モデレータ
  • 一度以下を読まれておくと良いと思います。

    3-4-1 VB .NET の演算子
    http://msdn.microsoft.com/ja-jp/library/dd314346.aspx

    --- 引用開始 ----------------------------------------
    原則として計算結果は、もとの計算対象項目と同じデータ型で算出されるか、またサイズが異なる複数のデータ型を 1 つの計算式で使っていた場合は、最もサイズが大きいデータ型で算出されます。
    --- 引用終了 ----------------------------------------


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク mep1 2009年4月25日 9:49
    2009年4月25日 1:36
    モデレータ
  • 返信頂き有難うございます。
    なるほど、右辺の演算でデータ型を注意しなければならないということですね。
    てっきり左辺の変数のデータ型(の大きさ)だけ気をつければいいと思っておりました。(汗;
    ご対応頂き有難うございました。m(_ _)m

    2009年4月25日 9:52