PDA

View Full Version : مبتدی: سر ریز شدن متغیر



سپهر-111
شنبه 14 مرداد 1391, 14:45 عصر
سلام دوستان :قلب:

من یک سوال داشتم؟؟
چرا وقتی عمل ضرب رو در برنامه زیر انجام میدیم متغیر B سر ریز میشه؟؟؟:متعجب:


Private Sub Command2_Click()
Dim B As Long

B = 255 * 130
Text2.Text = B

End Sub




مگه ظرفیت نوع LONG
4بایت نیست؟؟ پس چرا سر ریز میشه؟؟؟!!

SlowCode
شنبه 14 مرداد 1391, 14:55 عصر
علتش اینه که اون دو تا متغیر از یک جنس نیستند، یکی بایته و اون یکی لانگ، بنابراین باید تبدیلش کنی.
حالا یا A رو از نوع long تعریف کن یا کد زیر رو با خط 5 جایگزین کن:
B = CLng(A) * 130

سپهر-111
شنبه 14 مرداد 1391, 15:03 عصر
علتش اینه که اون دو تا متغیر از یک جنس نیستند، یکی بایته و اون یکی لانگ، بنابراین باید تبدیلش کنی.
حالا یا A رو از نوع long تعریف کن یا کد زیر رو با خط 5 جایگزین کن:
B = CLng(A) * 130


ممنون از پاسخ شما
حالا یک مسله دیگه ؟؟؟

اینم سر ریز میشه ؟؟
دلیلش چیه؟!


Private Sub Command2_Click()
Dim B As Long

B = 255 * 130
Text2.Text = B

End Sub

SlowCode
شنبه 14 مرداد 1391, 15:23 عصر
نمیدونم احتمالا اینا رو به عنوان int در نظر میگیره، ولی توی این هم اگه یکی رو با CLng تبدیل کنی خطا برطرف میشه. یکم عجیبه!!!

the king
شنبه 14 مرداد 1391, 16:16 عصر
سلام دوستان :قلب:

من یک سوال داشتم؟؟
چرا وقتی عمل ضرب رو در برنامه زیر انجام میدیم متغیر B سر ریز میشه؟؟؟:متعجب:


Private Sub Command2_Click()
Dim B As Long

B = 255 * 130
Text2.Text = B

End Sub




مگه ظرفیت نوع LONG
4بایت نیست؟؟ پس چرا سر ریز میشه؟؟؟!!


نمیدونم احتمالا اینا رو به عنوان int در نظر میگیره، ولی توی این هم اگه یکی رو با CLng تبدیل کنی خطا برطرف میشه. یکم عجیبه!!!

همینطوره، وقتی نوع داده یک عدد صحیح رو مشخص نکنید از نوع Integer استفاده می کنه، یک کاراکتر کلیدی & رو به انتهای اولین عدد اضافه کنید یا با CLng مستقیما
به Long تبدیل اش کنید، وقتی کامپایلر ببینه که شما محاسبه رو با یک عدد Long شروع کرده اید مقدار های عددی صحیح بعدی رو هم Long در نظر می گیره :

Dim B As Long
B = 255& * 130
Text2.Text = B



Dim B As Long
B = CLng(255) * 130
Text2.Text = B