teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

一部訂正

2016/04/25 01:47

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -11,4 +11,24 @@
11
11
  数値リテラルの最後の`L`はlong型のリテラルであることを示します。
12
12
  intで表現できずlongで表現できるような数値リテラルを書きたい時は省略してはいけません。
13
13
  int型で表現できる時は省略しても実害が発生するケースはあまり無いだろうと思います。
14
- (負の数を正の値で記述するなどのちょっと無理やりなことをしないかぎり。)
14
+ (負の数を正の値で記述するなどのちょっと無理やりなことをしないかぎり。)
15
+
16
+ ---
17
+ 【`L`の必要性に関して訂正】
18
+ > intで表現できずlongで表現できるような数値リテラルを書きたい時は省略してはいけません。
19
+
20
+ 「省略してはいけません。」ということはないようです。
21
+ raccyさんの回答を見ていただくのが早いですが、数値リテラルは自動的に昇格されます。
22
+
23
+ しかし、raccyさんも書かれているように、unsignedがらみで落とし穴があります。
24
+ ([きじねこ「第5回 int 型のサイズ」](http://www.kijineko.co.jp/tech/creintro/size-of-int.html)が分かりやすく解説してました。)
25
+
26
+ 恐らく、便利のための機能ではなくマルチ・プラットフォーム対応のための機能ではないかと思います。
27
+ 処理系によってintやlongのサイズは異なりますので、数値リテラルがlongになるかどうかは処理系依存です。従って、マルチ・プラットフォーム対応する時に適切につけることは難易度高いです。
28
+
29
+ マルチ・プラットフォーム対応しないなら、明示的に指定しておいた方が落とし穴にはまる心配をしなくてよさそうです。
30
+ マルチ・プラットフォーム対応する時は、下手に指定できないため、注意深く落とし穴を避けるしかなさそうです。
31
+ たぶん、処理系によって型が異なるような大きな数値リテラルをなるべく使わないことですね。
32
+ 各型で表現できる最大/最小は<limits.h>(C言語)や<limits>(C++言語)に定義されてます。
33
+ 1パイトが8ビット以上は保証されてますので、1バイトで表現できる値(±127まで)は安全ですね。
34
+ 実際にint型が1バイトな処理系はほとんど無い(もしかすると規格で禁止?)でしょうから、±32767までは事実上安全でしょう。