質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

3回答

1375閲覧

long型・short型、float型を使用すべきシーンとは

tommy_seiya

総合スコア32

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

0クリップ

投稿2022/05/21 08:47

数値のデータ型についての質問です。

整数型としては、特別な理由がない限りはint型を使用するのが基本という認識なのですが、"わざわざ"shortやlongを用いる場合には、どのような理由が考えられますか?使用するメモリサイズやパフォーマンスという観点の他、「あるメソッドが返す値のデータ型に合わせる」といった理由も考えられるかもしれませんが、この場合にも「なぜそのメソッドでは"わざわざ"longやshortを戻り値の型として用いているのか」という疑問が生じます。

また浮動小数点数型としては、特別な理由がない限りはdouble型を使用するのが基本という認識なのですが、"わざわざ"floatを用いる場合には、どのような理由が考えられますか?なんらかの恩恵を受けられるものなのでしょうか。

データ型としては無難にintやdoubleを用いており、short・long### ヘディングのテキストやfloatをあえて使ってみるという思考に至りません。他人が書いたプログラムで使われているのを見ると、データ型に対する理解の浅さに不安を覚えることがあります。深く考えすぎでしょうか?
やはりデータの送受信を伴う場合などには、データ型に関してもシビアに考えなくてはならないものでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2022/05/21 08:49

>そのメソッドでは 幾つかその疑問に思うようなコードを例示してもらえますか? ※ただ結局は意図は書いた人しか分からないので想像以上にはならないですが
Zuishin

2022/05/21 09:14

ネクタイが必要な場面を思い付く限り教えてください、みたいな質問。 気にしなくても、必要な時は必要と書いてあるので、DLL を使ったり、標準で対応されていないファイルフォーマットに対応したり、レガシーなデータベースを触ったり、Unity でゲームを作ったりなど、プログラムをたくさん書いていればそのうち出会います。
guest

回答3

0

(自己解決の早い人ですね…)
longはintより長いので除くとして、ビット数の少ない型を使う恩恵として重要なものとしては、処理の高速化が挙げられます。
常にではありませんが、並列計算が可能な場合や倍精度浮動小数点数の演算器が単精度に比べて少ない環境、またメモリアクセスのパターンによっては、intよりshort、doubleよりfloatの方が計算が速い場合があります。
例として以下の(並列計算に対応した)numpyを使った行列の乗算は私の環境で、型がf8(倍精度)では1.7秒ほどに対し、f4(単精度)では0.9秒ほどに短縮されました。

Python

1import numpy as np 2import random 3import time 4random.seed(0) 5size = 4096 6testtype = 'f4' #型をf4=単精度・f8=倍精度で比較 7temp = [[random.random() for i in range(size)] for j in range(size)] 8matA = np.matrix(temp, dtype=testtype) 9temp = [[random.random() for i in range(size)] for j in range(size)] 10matB = np.matrix(temp, dtype=testtype) 11start = time.perf_counter() 12matX = np.matmul(matA, matB) 13print(time.perf_counter() - start)

もう1例として、以下のCで特に意味もなくメモリアクセスするコードは私の環境でintで0.65秒ほどに対しshortでは0.5秒ほどに短縮されました。(もっと大きく短縮される例を示したかったところですが、まあ短縮しうることは示せたのでよしとします)

C

1#include <stdio.h> 2#include <stdlib.h> 3#include <time.h> 4#define ARR_SIZE 0x1000000 5#define COUNT 100000000 6int main(void) 7{ 8 srand(0); 9 int* arr = malloc(ARR_SIZE*sizeof(int)); //arrの型をint・shortで比較 10 int* diffList = malloc(COUNT*sizeof(int)); 11 for(int i=0; i<ARR_SIZE; i++) 12 { 13 arr[i] = rand()%0x100; 14 } 15 for(int i=0; i<COUNT; i++) 16 { 17 diffList[i] = (rand()%0x100)>>(rand()%8); 18 } 19 20 int sum=0; 21 int ptr=0; 22 clock_t start = clock(); 23 for(int i=0; i<COUNT; i++) 24 { 25 ptr += diffList[i]; 26 ptr%=ARR_SIZE; 27 sum += arr[ptr]; 28 } 29 clock_t end = clock(); 30 printf("%d, %f", sum, (double)(end-start)/CLOCKS_PER_SEC); 31 return 0; 32}

投稿2022/05/21 22:43

編集2022/05/21 22:47
ikadzuchi

総合スコア3047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2022/05/21 23:24

double と single のどちらが速いかは環境によるので、速度を求めて型を決めるようなことは非常にレアケースだと思われます。 あなたのところではたまたま float が速かった、しかもこのコードにおいてはという条件つきで、というだけです。
退会済みユーザー

退会済みユーザー

2022/05/22 01:24 編集

Zuishin さんのレスに同意。質問者さんが回答に書いた「(long, float は)使うべきところでは使う」にも同意。 使うべきところの例としては、long は Stream クラスのメソッド・プロパティとか、short は SQL Server の smallint に対応するエンティティクラスのプロパティとかでしょうか。 float を使うのは、昔の 16-bit CPU 時代に 64KB を超える連続したメモリが取れないような場合にあったような気がしますが、今はどうでしょう?
len_souko

2022/05/22 02:39

そもそも質問のタグに「C#」と指定があるのにC#を避けて別言語のコードのみ提示して回答とするのは如何なものかと思います 確かに多言語とのやり取りが必要な場合もあるのでその場合は相手のAPIで指定された引数や戻り値の型に合わせる必要がある等の場面はありますが・・・ どちらかというと、小さいデータ型を指定する場合は使用する値の範囲がそんだけって利用者に提示する意味で使うとかその程度かと
ikadzuchi

2022/05/22 06:37

> Zuishinさん > 非常にレアケース そう多くはないでしょうが「非常にレアケース」とまでは思いません。現にあなたも「Unity でゲームを作ったり」を挙げていますがこれは速度を求めてのことでしょう。 > 環境による/あなたのところではたまたま 私の環境は何の変哲もない最近の一般的なものなので、よほど昔の環境でない限り多くの環境で同様の結果になると思います。皆さん試していただけると嬉しいのですが。 > このコードにおいては 無論コードによるのでコードごとに速くなるか確認しなければいけませんが、このコードのような処理をする状況、このコードのような結果になる状況はそう珍しくないだろうと予想しています。 > SurferOnWwwさん > 「(long, float は)使うべきところでは使う」にも同意。 ええ、その使うべきところの例を挙げる目的の回答です。 > 使うべきところの例としては、~とかでしょうか。 質問中の「『あるメソッドが返す値のデータ型に合わせる』といった理由も考えられるかもしれませんが、この場合にも『なぜそのメソッドでは"わざわざ"longやshortを戻り値の型として用いているのか』という疑問が生じます。」に相当する内容ですね。無限後退に陥るのでそれを答えとすべきではないと思いました。 > len_soukoさん > 質問のタグに「C#」~如何なものか 「プログラミング言語」もありますし、特に言語に依存する内容でもないので例を示しやすい言語を使いました。 (C#で有名な数値演算ライブラリが思いつかないのと、C#の環境を立ち上げるのが面倒) Unityでゲームを作る場面での例なども示せるとよかったのですが。 > 使用する値の範囲がそんだけって利用者に提示する それもありそうですね。色々な理由があるでしょうけれど、私は処理の高速化が重要だと思ったのでこれに絞って回答しました。
Zuishin

2022/05/22 07:45

> 現にあなたも「Unity でゲームを作ったり」を挙げていますがこれは速度を求めてのことでしょう。 なぜそう思いましたか? どこかにそのようなことが書いてありますか? Unity は対応環境が多いのが特徴の一つです。 すべての環境で float の方が速いのですか?
退会済みユーザー

退会済みユーザー

2022/05/22 08:15 編集

やっぱり脳内変換があるのでは? 「C#の環境を立ち上げるのが面倒」とか言ってるようではそうなんだろうなぁと思いました。
ikadzuchi

2022/05/24 16:05

> なぜそう思いましたか? > どこかにそのようなことが書いてありますか? GPUでfloatがdoubleより速いのは常識ですね。ITmediaとかインプレスとかASCIIあたりのニュースサイトのGPU関連の記事を見ればいくらでも書かれています。 > Unity は対応環境が多いのが特徴の一つです。 > すべての環境で float の方が速いのですか? 「すべて」を証明するのは困難ですが、おそらくは、GPUが関わる部分ではUnityの対象すべてfloatの方が速い(もしくはdoubleは完全に使えない)のではないかと思います。 > やっぱり脳内変換があるのでは? > 「C#の環境を立ち上げるのが面倒」とか言ってるようではそうなんだろうなぁと思いました。 どの点について脳内変換だと言っているのかぐらい示してほしいものですが、それはそうと脳内変換があることと環境を立ち上げるのが面倒であることに関連性を見出すあなたの精神が心配になります。 統合の失調したような文章に返事をするのは非常に面倒なのでやめてもらえませんか。
Zuishin

2022/05/25 12:17 編集

https://nakamura001.hatenablog.com/entry/20090226/1235641233 iPhone で計測して double の方が速いという結果を出している人がいますね。 あなたはいつも自分の頭の中だけで結論を出して、いい加減なことばかり書いていますが、どちらが速いのか機種によって不定で、どれがメジャーとも決まっていないのであれば、それを目的に選んだとは考えにくいでしょう。 なぜ Unity で float が使われているのかについて、私には心当たりがありますが、あなたの言っていることはそれとは違い、何の根拠もないメチャクチャです。
ikadzuchi

2022/05/25 13:06

> iPhone で計測して double の方が速いという結果を出している人がいますね。 「floatを使った方が速い」という結論のようですが。 > あなたはいつも自分の頭の中だけで結論を出して、いい加減なことばかり書いていますが、 つ[鏡] > どちらが速いのか機種によって不定で、どれがメジャーとも決まっていないのであれば、それを目的に選んだとは考えにくいでしょう。 文脈からUnityについての話をしているように見えますが、私はGPUについての話をしているのにそれを無視してCPUの話にすり替えないでください。 > なぜ Unity で float が使われているのかについて、私には心当たりがありますが、 はいはいいつもの匂わせね。どうせ嘘がバレるのが怖いんでしょ、聞かないでおいてやるよ。 > あなたの言っていることはそれとは違い、何の根拠もないメチャクチャです。 仮にそうだとして、言うだけあなたよりマシです。
退会済みユーザー

退会済みユーザー

2022/05/26 03:05

> どの点について脳内変換だと言っているのかぐらい示してほしいものですが、 「脳内変換」=「妄想」と言ってもよさそうです。 > それはそうと脳内変換があることと環境を立ち上げるのが面倒であることに関連性を見出すあなたの精神が心配になります。 私のことならご心配無用です。
Zuishin

2022/05/26 05:20

> 結果の検証 > floatとdoubleではdoubleを使った方がかなり速い。floatとdoubleが混ざった計算が行われる場合もdoubleを使った方が良い えっと、どこに float が速いと書いてありますか? もしかして、妄想と現実の区別がついていないため、いつも言いがかりをつけているのですか?
Zuishin

2022/05/26 05:22

> 文脈からUnityについての話をしているように見えますが、私はGPUについての話をしているのにそれを無視してCPUの話にすり替えないでください。 CPU や GPU の話をしているのはあなただけで、私は環境の話をしています。
ikadzuchi

2022/05/27 17:56

> SurferOnWwwさん > 「脳内変換」=「妄想」と言ってもよさそうです。 人を貶したいのは分かりましたから、私の考えに間違いがあるならその箇所を示して、そうでないならいいかげん内容の無い文を書くのをやめてください。 > Zuishinさん > どこに float が速いと書いてありますか? 冒頭の赤字の注意書きくらい読めないのですか? リンク先に正しい結果が書かれています。 https://nakamura001.hatenablog.com/entry/20090301/1235924387 > CPU や GPU の話をしているのはあなただけで、私は環境の話をしています。 あなたの考えでは「環境」にはCPUやGPUは含まれないのでしょうか。Unityが使われる環境にはCPUとGPUが存在することは説明するまでもないことだと思っています。
Zuishin

2022/05/27 23:16 編集

> 冒頭の赤字の注意書きくらい読めないのですか? リンク先に正しい結果が書かれています。 > float型とdouble型を比較した場合、常にfloatが速いと思ってはダメらしいがiPhoneについては float を使った方が速い。 という結論のことですか。なるほど、その検証法では iPhone ではfloat の方が速いという結果になったようですね。 しかしそれ以外についても float の方が速いとはなっていないので、その記事でも結論に修正はされていません。 Unity が設計された時に double の方が速い環境が無視できないほどあった(ある)以上、「たまたまその環境では」という枝葉末節にしかならず、こちらの結論にも何の影響も及ぼさないのですよ。 > あなたの考えでは「環境」にはCPUやGPUは含まれないのでしょうか。Unityが使われる環境にはCPUとGPUが存在することは説明するまでもないことだと思っています。 当然含まれています。 それを全部含めての話をしているのに、勝手にその中のどれかに特化しているのがあなたという意味です。
ikadzuchi

2022/05/31 16:47

> なるほど、その検証法では iPhone ではfloat の方が速いという結果になったようですね。 とりあえずあなたが挙げた例がただの勘違いであなたの理論を補強する役に立っていないことは理解していただけたようでよかったです。 > しかしそれ以外についても float の方が速いとはなっていないので~ > Unity が設計された時に double の方が速い環境が無視できないほどあった(ある)以上 その根拠を挙げてほしいところです。 そもそもなぜあなたは枝葉末節のたまたまその環境でdoubleが速い例を挙げて私の説を否定した気になっているのでしょう。 > それを全部含めての話をしているのに、勝手にその中のどれかに特化しているのがあなたという意味です。 あなたが勝手にGPUを含めず「iPhoneのCPU」に特化しているのですが…。 Unityでfloatが使われる理由はGPUでfloatが速いからだと私は思っており、UnityにおいてCPUは特に語る必要を感じません。 CPUとGPUの少なくとも一方でfloatが速ければUnityでfloatが頻出する理由として十分だという論理はお分かりですか?
Zuishin

2022/05/31 22:54

> そもそもなぜあなたは枝葉末節のたまたまその環境でdoubleが速い例を挙げて私の説を否定した気になっているのでしょう。 あなたが枝葉末節のたまたまその環境の話をしている回答をしたので低評価の理由を書いたというだけです。 「float が速いために採用されている」ことの根拠を示さなければならないのはあなたで、私ではありません。
ikadzuchi

2022/06/04 07:48

> あなたが枝葉末節のたまたまその環境の話をしている回答をしたので 繰り返しますが、私の環境は何の変哲もない最近の一般的なものなので、よほど昔の環境でない限り多くの環境で同様の結果になると思います。 > 「float が速いために採用されている」ことの根拠を CPUとGPUの少なくとも一方でfloatが速ければUnityでfloatが頻出する理由として十分だという論理がお分かりいただけなかったようで残念です。
Zuishin

2022/06/04 11:52 編集

えっと、通知来ないので、返事するならすぐしてもらえませんかね。 いくつもの OS や機種がある中、自分の環境が一般的だとかいうはちゃめちゃ理論も無意味だし、一般的かどうとかいう問題でもないし、十分だというあなたの妄想もどうでもいいです。 Unity が float を採用した理由について、妄想以上のエビデンスはないんですよね? 何日もかけて情報ゼロなので、まったく評価を上げる理由がありません。
ikadzuchi

2022/06/04 18:00

> 返事するならすぐしてもらえませんかね。 あなたの本題に関係ない行き当たりばったりの言いがかりを丁寧に潰していくのって大変なんですよ。なので気力のあるときでないと返事はできないです。 > いくつもの OS や機種がある中、自分の環境が一般的だとかいうはちゃめちゃ理論 いくつもあるっちゃありますけど、今回の話にOSは関係しないし、関連するCPUやメモリの構造の部分で根本的に仕組みが異なるような環境はそう数は無いと思っています。組み込みかPC/スマホかスパコンかレベルの違いでいくつもあるなら別ですけど。そして私の環境であるx86は最近の主流で結構な数が出ておりこれを一般的と呼ぶことに特に問題を感じません。 > も無意味だし、一般的かどうとかいう問題でもないし、 一般的かそうでない(「あなたのところではたまたま float が速かった」)かというあなたが持ち出した話を自ら否定してくれたのでこの話は終わりでよいのですね。 > 十分だというあなたの妄想もどうでもいいです。 > Unity が float を採用した理由について、妄想以上のエビデンスはないんですよね? 状況証拠を元に導いた推測を妄想と呼ぶのならば、はい。あなたの方にそれを否定する材料は無いようなので、特に考えを変える必要は無さそうですね。 > 何日もかけて情報ゼロなので、 それはあなたに対応するこちらのセリフですね…。 > まったく評価を上げる理由がありません。 あなたの口からそのような言葉が出るとはたいへん意外です。人から与えられた情報に依存して評価を改めるという考えなどあなたにあったのですか?
Zuishin

2022/06/06 09:42

まともな回答には高評価しますが、まともな回答ではないので低評価というだけです。 回答が改められたことで評価を改めたことは何度もあります。 あなたはまともに改めたことがないので、あなたの評価を改めたことはまだ無かったかもしれませんが、それはただの特殊な例なので、それを基準に判断されても困ります。
ikadzuchi

2022/06/07 16:56

それは人からの情報に依存してではなく、あなたの考えに人が合わせた時の話でしょう。 まともに改めたことがないのはあなたです。
Zuishin

2022/06/09 23:15

私は自分が間違っている場合はちゃんと認めていますが、あなたが改めたところは見たことがありません。 あなたはまだ大気には浮力がないとバカなことを信じていて、「ある」と言う私たち人類を「考えを改めない」と評価しているだけです。脳内ソースを絶対だと思うのは勝手ですが、あなたへの低評価の方が多いことは認めたほうがいいでしょう。理由を書かないのはあなたが面倒くさいからというだけにすぎません。
ikadzuchi

2022/06/16 16:42

> 私は自分が間違っている場合はちゃんと認めていますが、あなたが改めたところは見たことがありません。 まああなたの頭の中ではそうでしょうね。あなたが現実を認めるとは思っていません。(少なくとも認めたことを明言するとは) > あなたはまだ大気には浮力がないとバカなことを信じていて、 私があなたの前で浮力の話をしたことといえばこの回答のコメント欄しか思い当たらないのでこれに関しての話だと解釈しますけど、 https://teratail.com/questions/211895#reply-314129 私が浮力より空気抵抗の方が支配的と言っているのを大気には浮力がないと信じていると馬鹿げた理解をするのはあなたくらいのものでしょう。 あなたの妄想をあたかも私の考えのように、しかもソースを示さずに言及するのは、誤解を招きうるのでやめてほしいものです。 (が、あなたのような異常者がそれをやめるわけが無いことは分かっています。この発言は私が誤解されないように他者に向けて説明する目的です) > 「ある」と言う私たち人類を「考えを改めない」と評価しているだけです。 あなたと勝手に仲間にされる「人類」が可哀想です。 私が考えを改めないと評価したのは(そもそもこの例に限ったことではないですがこの例に関していえば)あなたが浮力があると言っていることではなく浮力でひらひらシミュレーションができると言っていることに対してですね。 私のより優れたひらひらシミュレーションが浮力で作れるならまだあなたにとりあう価値もありますけど。 > あなたへの低評価の方が多いことは認めたほうがいいでしょう。 そうですね、(低評価者と批判的なコメント者はおおむね一致する前提で)変なの2人呼び込んじゃったので何か対処を考えないとなあと思っています。 評価は1つ付くと呼び水になっていくつも付くものですから、あなたのような否定的なコメントを付ける人が早期に来ると評価が下がるんですよね。 > 理由を書かないのはあなたが面倒くさいからというだけにすぎません。 違うでしょう。最初は理由を書いているくせに間違いを指摘されるとそれを認められず別の理由があることにしているではないですか。
Zuishin

2022/06/23 15:50

通知が来ないから早くと言ってるのに、七日後に遠吠えねえ。
Zuishin

2022/06/23 15:50

自信がないなら噛みついてこなきゃいいのに。
Zuishin

2022/06/23 15:53

おっと、私の回答に低評価が連続でついた。
Zuishin

2022/06/23 15:54

なんでベストアンサーで高評価がついてる回答や、公式ドキュメントを引いて間違いなく裏を取ってる回答が低評価されるんですかねえ。
ikadzuchi

2022/07/18 17:01

繰り返しますが、あなたの妄言を丁寧に潰すには精神力を使うので返答のできる時は限られます。 (とはいえ3週間も経ってしまったのはちょっと自分でも予想外で少々申し訳無さもあります) > おっと、私の回答に低評価が連続でついた。 > なんでベストアンサーで高評価がついてる回答や、公式ドキュメントを引いて間違いなく裏を取ってる回答が低評価されるんですかねえ。 無関係な私に聞かれても困ります。 意味のある反論を潰されて、否定できないような言いがかりを付ける方針に変えたのでしょうか。(そうでないなら私に対してのコメントで別の質問の低評価に言及する理由を教えてください) ところでなぜ内容もないコメントをわざわざ4回に分けるのでしょう。 https://teratail.com/questions/211895#reply-314129 こちらのあなたの馬鹿げた発言を流したいのですか?
guest

0

自己解決

一般論や慣習などがあれば知りたかったところではありますが、使うべきところでは使う。あとは触って慣れろ。というレベルの話でしかない内容でした。

投稿2022/05/21 12:05

tommy_seiya

総合スコア32

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2022/05/21 12:28

int と double で事足りることが多く、そうでない時はそれぞれ個別の理由があるというだけです。
退会済みユーザー

退会済みユーザー

2022/05/26 03:11

理由も書かずにマイナス評価をつけた卑怯者に対抗してプラス評価をつけておきます。「(long, float は)使うべきところでは使う」には同意ですので。
guest

0

既に自己解決してますが…

longintshortsbyte では値域が異なる

であれば,情報の値域に応じて型を使い分けることを「わざわざ」と表現する感覚の方が謎ですので,そこを述べるべきだったのでは.

sbyteshort で十分なときに int を使う」ことの方が「何故?」と感じますが……
あえて int を用いるのが「無難」とはどういう意味なのか?

例えば,たかだか 0~20 くらいの値しか扱わないときには byte で十分なわけですが,そこを int にすると何か恩恵があるのか? 無いならば,何故「わざわざ」int にするのか?
そこに恩恵が無いならば → 自然と byte が選択されるのでは?

投稿2022/05/23 02:39

fana

総合スコア11658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/05/26 06:23

C# のコードで 1 と書けば int だし、1.0 と書けば double なのだから、int と double が普通&自然という考え方はできませんか? > int にすると何か恩恵があるのか? 無いならば,何故「わざわざ」int にするのか? そこは逆に、「C# で 1 と書くと int 型になるけど、そこをわざわざ byte にすると何か恩恵があるのか? 恩恵があるなら byte を使えば良いし、なければ自然と int が選択されるのでは?」というのが自然な考えだと自分は思いますけど。
fana

2022/05/26 06:51 編集

質問文を抜粋しますが, > 使用するメモリサイズやパフォーマンスという観点の他、「あるメソッドが返す値のデータ型に合わせる」といった理由も考えられるかもしれませんが、この場合にも「なぜそのメソッドでは"わざわざ"longやshortを戻り値の型として用いているのか」という疑問 とのことです. 【「メモリサイズ」「パフォーマンス」「返す値に合わせる」という話があることはわかっているけども,それでも int を使うのが良い】という考えを述べているものと読みました. ↓ なので,このような回答内容になっています. (私は無知故にパフォーマンスの観点まではわかりませんけども)例えば「メモリサイズ」のような恩恵がある(ありそうである)のにもかかわらず, int を選ぶ(そして,恩恵がありそうな型を選択することを「わざわざ」と称する)という感覚が私にはわかりません,という話です.
fana

2022/05/26 06:56 編集

byte や short ではなくて int を使うという選択を行うと「メモリサイズが肥大化する(であろう)」という具体的なデメリットが見えている. 「int が 普通? 自然? だから」という漠然とした理由では,そのデメリットをあえて享受する理由としては弱いのではないかと初心者ながら思うところでございます. (もちろん,「そんなギリギリの世界で生きてないならどうでもいいだろ」と言われれば,まぁ実際上はそうかな,とは思いますが)
fana

2022/05/26 07:02 編集

また, int や double が > 無難 とされている. ↓ 逆に言えば他の型には「何らかの 難」がある,と考えられているのだと読みました. 値域的に十分であるから選ばれている型に対して存在する「難」と何なのか? …というのが私にはわからないので逆に問うてみている感じに書いたのですが,応答はなかったですね.
Zuishin

2022/05/26 11:21

> 逆に言えば他の型には「何らかの 難」がある,と考えられているのだと読みました. int と double 以外の「難」はやはり .NET のライブラリで使われている型でしょうね。 たとえば List<T> の添え字は int ですし、Math クラスの引数の多くは double や decimal です。 ライブラリで int や double が優先して使われたのは歴史的な事情があり、リテラルで優遇されているのも同じ理由だと思います。 C# が作られた当時は Int32 と Double がパフォーマンスが高い場面が圧倒的に多かったというのも歴史的事情の一つですね。 現在では少し事情が変わったので、nint と nuint ができました。 https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/builtin-types/nint-nuint
fana

2022/05/27 01:44

「とにかくいつでも一番小さいのを使っとけ」みたいな原理主義的主張をしているつもりはない.(回答文を見返すと,そう書いているようにも読める気がしないでもない) intに昇格なり暗黙変換なりするような使い方が一般的に想定される値なのであれば,「それは int にしとけばよくね?」というのはある. 本件は int でない型を用いることに何らかのメリットがある程度(?)見えている場面に関する話をしていると思うから, 「そのメリット vs デメリット(難)」みたいなのを鑑みて「こういう場面であれば/こういう場面であろうとも」結局 int がいいよね,とかそういう話が欲しい(欲しかった)のだろうと思う.
fana

2022/05/27 02:01

To Zuishin様: ご教示に感謝します. (現状で知らぬ事柄に対する適切な応答は現状不可能ですので,謝意のみを示すに留まります) #リンク先の日本語は相変わらず一文目から「???」な文章ですね… 日 > C# 9.0 以降、nint キーワードと nuint キーワードを使用して、nintを定義できます。 英 > Starting in C# 9.0, you can use the nint and nuint keywords to define native-sized integers.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問