DOBON.NETプログラミング道掲示板
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
ツリー一括表示
C#のlong型でオーバーフローになる
/つき
(23/11/20(Mon) 11:56)
#35543
└
Re[1]: C#のlong型でオーバーフローになる
/Hongliang
(23/11/20(Mon) 12:19)
#35544
└
Re[2]: C#のlong型でオーバーフローになる
/つき
(23/11/20(Mon) 13:15)
#35545
親記事 /
▼[ 35544 ]
■35543
/ 親階層)
C#のlong型でオーバーフローになる
□投稿者/ つき
一般人(1回)-(2023/11/20(Mon) 11:56:18)
環境/言語:[C#]
分類:[.NET]
初歩的なことだと思いますが、数値型変数の扱いについて質問です
long型の変数ansに数値や計算式を入れた場合にこうなります
@正常
long ans;
ans = 2500000000; ・・・正常
Aエラーケース
long ans;
ans = 50000 * 50000; ・・・50000と入力した時点でオーバーフローになります。
どちらもlong型の範囲内(-9,223,372,036,854,775,808 から 9,223,372,036,854,775,807)なので大丈夫では
と思うのですが、なぜオーバーフローになるのでしょう?
どなたがご教授お願いします!
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
[
□ Tree
]
返信
削除キー/
編集
削除
▲[ 35543 ]
/
▼[ 35545 ]
■35544
/ 1階層)
Re[1]: C#のlong型でオーバーフローになる
□投稿者/ Hongliang
大御所(648回)-(2023/11/20(Mon) 12:19:23)
> ans = 50000 * 50000; ・・・50000と入力した時点でオーバーフローになります。
1. C#において、接尾辞のない整数値は、intとして扱われます。
2. int同士の演算はintを返します。
この仕様のため、50000 * 50000はintで計算され、intの上限である約21億を超える25億となってオーバーフローになります。
接尾辞Lを付けるとかします。
ans = 50000L * 50000;
// 1つ目の50000はlong型になり、long * intはlong型を返します。
50000が変数なら、明示的にキャストするという方法もあります。
int x = 50000;
ans = (long)x * x;
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
[
親 35543
/
□ Tree
]
返信
削除キー/
編集
削除
▲[ 35544 ]
/ 返信無し
■35545
/ 2階層)
Re[2]: C#のlong型でオーバーフローになる
□投稿者/ つき
一般人(3回)-(2023/11/20(Mon) 13:15:53)
Hongliangさん
わかりやすい解説ありがとうございました。
> 1. C#において、接尾辞のない整数値は、intとして扱われます。
> 2. int同士の演算はintを返します。
このこと、全然知らずにやってました。
原因がわかって助かりました。
これからは変数の特性にも気を付けていこうと思います。
ありがとうございました。
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
[
親 35543
/
□ Tree
]
返信
削除キー/
編集
削除
Mode/
通常管理
表示許可
Pass/
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
-
Child Tree
-