【C言語】long定数の接尾子Lを使うと(unsigned long)1は
1ULと書ける

long定数 接尾子Lの使い道

■接尾子Lで桁あふれを回避する

//接尾子Lの使い道
#include <stdint.h>
#include <limits.h>
#include <stdio.h>
int main(void){
    uint32_t     x = UINT_MAX ;
    uint64_t     y = x + 2 ;
    uint64_t     z = x + 2L ;
    
    printf("y = %lx\n",y);
    printf("z = %lx\n",z);
}

このプログラムは以下のように表示されます

$ ./a.out
1
100000001

y = x + 2 ;と記述すると右辺をint型で計算するため桁あふれします。

y = x + 2L ;と記述すると右辺をlong型で計算するため桁あふれしません。


■接尾子l(小文字のエル)は紛らわしい

#include <stdio.h>
int main(void){
    long x = 10l;
    long y = 201;
    printf("x = %ld\n",x);
    printf("y = %ld\n",y);
    long z = 30L;
    printf("z = %ld\n",z);
}

このプログラムは以下のように表示されます

./a.out
x = 10
y = 201
z = 30

x = 101(百壱)になりません。
10lは10壱ではなくて10エルと書いています。


参考:

DCL16-C. long 値を表すには小文字の “l” ではなく大文字の “L” を使う