实型变量赋初值右值“ f ”后缀的作用

想要询问一个很基础的问题,在给实型变量赋初值的时候,为什么后面要加一个 “ f ”呢?
比如:

float f=1.5f;

以及有符号长整型和无符号长整型后面都有“ L ”,比如:

unsigned long iUnsignedLongNum;
iUnsignedLongNum=6666666L;

感谢回答[rose]!

给编译器看的,人并不需要特别计较
因为编译器需要规则,就像楼上很多人说的,编译器默认认为是double,那么默认规则会有一些意外(比如就本来就是想要单精度浮点的运算 2/1),所以特别定义一个规则告诉编译器是你指定的类型

比较一下编译器的规则推论(当然个人说:人不必计较,这是给机器看的,只是有时候出于某些特殊目的,我需要强制约定一下,避免默认计算规则不符合需求)

var m = 2 / 1;  ------------啥都不加,他是int
var i = 2 / 1.0;-------------有1.0了,默认是double
var j = 2 / 1.0f;----------------出于某些特殊需要,我只需要单精度浮点

float float f = 1.0F
double double d = 1D;
decimal decimal d = 1,0M
uint unit i = 1U;
long long i = 1L;
ulong ulong i = 1UL;

f后缀表示float型,l后缀表示长整形,小数的数据不加符号,默认是double型,整型数据不加符号,默认是int。

加f表示1.5是float型,不是double型
L代表输入的整数是长整型,不是短整型

补充问一下,这个后缀是不是必要呢?我去掉后缀发现正常运算输出?