[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/05/27(Fri) 11:01
投稿者名:KIRIRI
Eメール:
URL :
タイトル:
LONG型でのオーバーフローエラー
いつも参考にさせていただいてます。

VB6で作成しています。

RS232Cでマイコンと通信しています。
マイコンから受け取った2バイト分のデータをLong型の1つの変数へ代入する際にオーバーフローして
しまいます。

'==========標準モジュール変数==========
Public g_Step(4) As Long             '受信データ表示用
'==================================

'==========フォーム上のモジュール変数==========
Private m_reData(100) As Byte    '受信データの保管先
'==============================================

'引数:受信データの開始位置
Private Sub MonitorDataEdit(strt As Integer)

    '◆各チャンネルの受信データを格納
    g_Step(0) = m_reData(strt + 3) * &H100 + m_reData(strt + 4)
    g_Step(1) = m_reData(strt + 6) * &H100 + m_reData(strt + 7)
    g_Step(2) = m_reData(strt + 9) * &H100 + m_reData(strt + 10)
    g_Step(3) = m_reData(strt + 12) * &H100 + m_reData(strt + 13)
    g_Step(4) = m_reData(strt + 15) * &H100 + m_reData(strt + 16)

    Call RBufEdit(strt, strt + 26)      '処理済みデータは削除
End Sub

'◆各チャンネルの受信データを格納
の処理でオーバーフローエラーが出てしまいます。
m_reDataはbyte型なので最大値は256。
最大値を考慮して上記の演算を行っても、Long型の範囲を超えることはないと思うのですが。

なぜ「オーバーフロー」がでてしまうのでしょうか?

よろしくお願いします。

投稿時間:2005/05/27(Fri) 11:46
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: LONG型でのオーバーフローエラー
LONG型でのオーバーフロー しているのではありません。
個々に計算して見れば解る筈ですが。

    Dim a As Long
   ' a = &H100 * &H100 + 200
    a = &H100& * &H100& + 200&

計算している変数が Integer 型で計算の過程でInteger の範囲を超えたからです。

投稿時間:2005/05/27(Fri) 11:49
投稿者名:KIRIRI
Eメール:
URL :
タイトル:
Re^2: LONG型でのオーバーフローエラー
回答ありがとうございます。

返信するタイミングがかぶってしまったようです^^;

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

投稿時間:2005/05/27(Fri) 11:47
投稿者名:KIRIRI
Eメール:
URL :
タイトル:
Re: LONG型でのオーバーフローエラー
自己解決しました。

long型=Byte型+Byte型
結果を入れる変数がLong型でも、式の中がByte型のみなので
演算結果はByte型となり、ここでオーバーフローが起きている様です。

以後気をつけます。
板汚し申し訳ありませんでした。

投稿時間:2005/05/27(Fri) 13:50
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: LONG型でのオーバーフローエラー
# 既に解決済みのようですが、一箇所だけ反応。

> m_reDataはbyte型なので最大値は256。

Byte型の最大値は、255ですよ。

投稿時間:2005/05/27(Fri) 16:25
投稿者名:KIRIRI
Eメール:
URL :
タイトル:
Re^2: LONG型でのオーバーフローエラー
> Byte型の最大値は、255ですよ。

ご指摘ありがとうございます。

その通りですね。255です。
ボケてたみたいです^^;

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