
No.2ベストアンサー
- 回答日時:
整数リテラルの型は、その値を表現できるint以上の最も小さい型になります。
また、データの損失が起きないより大きな型への変換は暗黙に行われます。というわけでリテラルを変数に代入する(初期化含む)だけなら必要ありません。
しかし演算をする場合には事情が変わります。
int未満の整数同士の演算は自動的にint型に拡張してから行われますが、結果がどうなろうとintより大きくはなりません。
intとlongが同じ幅の処理系だと違いがわかりませんので、longの代わりにlong longを使ってみましょう
注:INT_MAXは符号付きint型の最大値(<limits.h>に定義がある)
#include <stdio.h>
#include <limits.h>
int main(void) {
long long a, b;
int m = INT_MAX;
a = m + 10;
b = m + 10LL;
printf("a=%lld\nb=%lld\n", a, b);
return 0;
}
aはオーバーフローにより結果がマイナスになります。
一方bはオーバーフローを起こさず、正常な結果が出ます。
これは、aでは演算を行う時点では単にint型を使用している為です。
一方、bでは計算時に10というリテラルがlong long型を指定されているので、演算がlong long型に拡張して行われます。
10LL
は
(long long)10
としてもいいですが、前者の方がずっとすっきりと書けます。
No.3
- 回答日時:
代入なら、特に意味はないでしょう。
型を明確にすると言う人もいるのでしょうが、Cで扱う型は標準型だけじゃなくて、システムで定義された型やユーザが定義した型もあります。
time_t x = 0;
size_t y = 0;
my_type z = 0;
とかのときに、Lを付けた方がいいのやら良くないのやら。
代入じゃなくて、演算のオペランドや関数引数の場合については#2の方のお書きの通り。
いずれにせよ小文字のエルは数字の1と見間違うと困るので、付けるなら大文字にしましょう。
No.1
- 回答日時:
C/C++は強く型付けされた言語です。
常に型を意識する必要があります。
>なぜLを付けるのでしょうか?
即値の型が(int)でなくlongであることを明示するためです。
32ビット処理系だとintもlongも大きさは全く同じなので、
有難味がわからないかも知れません。
しかし、64ビット処理系の中には
intは32ビット、longは64ビットというように
サイズが異なるものもあります。
また、16ビットの場合もintは16ビット、
longは32ビットというものがありました。
この場合、longの即値にLを付加することで、
intの変数への代入をコンパイラにチェックしてもらい、
バグの低減につながります。
C++の場合には、別の面があります。
C++では関数の多重定義が可能です。
void f(int n)と
void f(long n)
を別の関数として扱わせることができます。
この場合
f(10)ではintバージョンが呼ばれます。
longバージョンを呼びたいときは
f(10L)と書く必要があります。
バグの低減なんですね。
まだ簡単なプログラムしか組めないませんが、大きいプログラムを組むようになるとそういうのが重要になってくるのでしょうか。
分かりました。回答ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) Excel 条件付き書式について 1 2022/12/14 20:38
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) excel VBA if文について 3 2022/03/27 17:42
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Excel(エクセル) エクセルVBA、ファイル名をセルの値で保存の方法を教えてください。 おそれいります。こちらで数々のエ 6 2023/06/30 22:17
- Excel(エクセル) EXCEL値貼り付け(ある条件のもと自動化) 5 2023/06/06 12:21
- 経済学 ミクロ経済の問題 準線形効用関数 4 2022/08/14 00:58
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
このQ&Aを見た人はこんなQ&Aも見ています
-
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
float?数字の後にLがつくもの
C言語・C++・C#
-
-
4
return 1L
C言語・C++・C#
-
5
#if 1 #elseの意味について
C言語・C++・C#
-
6
C言語32bitから64bitの移行について
C言語・C++・C#
-
7
数値Lについて
C言語・C++・C#
-
8
C言語での引数の省略方法
C言語・C++・C#
-
9
複数桁10進数の*桁目だけを抽出したい
C言語・C++・C#
-
10
戻り値で構造体を返すことは可能でしょうか?
C言語・C++・C#
-
11
C言語のサフィックスについて
C言語・C++・C#
-
12
「{ } で囲むだけ」は正しい?
C言語・C++・C#
-
13
HEWを使用しているのですが、このようなエラーが出ました。
C言語・C++・C#
-
14
0xffffとは?
C言語・C++・C#
-
15
エスケープ文字の復帰(¥r)とはなんですか?
Java
-
16
ソースコードの1行が長いときの折り返し
PHP
-
17
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
18
組み込みソフト。ROM領域にデータ
C言語・C++・C#
-
19
プログラムについての質問です。 fflush(stdout)はいったいどのような時に使われているので
C言語・C++・C#
-
20
バッファとは何ですか
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
long型の定数の末尾にLを付ける...
-
C++のfor文について
-
相互参照するクラス、俺こんな...
-
64bit → 32bit型へのキャスト
-
C++でboolにintの値を代入する...
-
DLLでLIBファイルが作成されない
-
main.c:7:43: warning: implici...
-
typedef enumの使い方を教えて...
-
VC6でlong longでエラー?
-
ハンドルされていない例外が発...
-
構造体vectorの入れ子のfillの...
-
C言語のコンパイルエラー
-
visualstudio C# テキストボッ...
-
サンク(Cの関数呼び出し)に...
-
識別子が定義されていませんと...
-
クラスのファイル分割について
-
スレッドのスケジューリングポ...
-
エラー「invalid conversion fr...
-
intとINTの違いは?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
long型の定数の末尾にLを付ける...
-
C++のfor文について
-
C++でboolにintの値を代入する...
-
2重定義って??
-
main.c:7:43: warning: implici...
-
typedef enumの使い方を教えて...
-
プログラムの中で別のmainを呼...
-
変数の型を定義しなかった場合...
-
関数の実体定義にヘッダファイ...
-
ハンドルされていない例外が発...
-
構造体の要素すべてに対する四...
-
C言語のコンパイルエラー
-
DLLでLIBファイルが作成されない
-
sshdログの意味
-
DLLのLPSTR 項目の戻り値の取得...
-
enumについて
-
VC6でlong longでエラー?
-
【#define】 defineで定義した...
おすすめ情報