问题描述:C/C++程序许多时候会看到一个常数后面会跟一个后缀说明,比如UL。常数后缀许多时候不用也不会有问题,只要考虑常数赋给变量时不溢出,因为变量进行计算时会将常数转换成自己的类型。但是有时候就是因为常数没有指定类型,而且数值很小(比如2)不会有溢出问题,也会产生很隐蔽的bug。比如有次将编译器选项的优化项选择为最高(那样源代码编译后生成的二进制文件会最小),在使用printf函数在LCD屏输出常数2时就出现了问题,输出的这个数字会不断改变,然后将该常数类型用后缀限定后,就一切正常了。所以在使用的编译器不是那么聪明,或者将编译器选项按照自己要求进行了修改后,程序中许多地方都要严格的进行书写。因为常数后缀在许多时候的关键作用,于是搜集资料进行了整理与学习。

  数的进制:二进制数,八进制数(O),十进制数,十六进制数(0x)。程序中十进制数和十六进制数最为常见,八进制数很少见,二进制数只是一种表示(程序中并不能直接书写)。

  整数常数后缀:u或U(unsigned)、l或L(long)、u/U与l/L的组合(如:ul、lu、Lu等),u和l没有顺序区别。例:100u;-123u; 0x123l。



  浮点常数后缀:科学计数形式和小数点形式。浮点常数默认是double的。f或F(单精度浮点数)、l或L(长双精度浮点数)。(注:因浮点型常数总是有符号的,故没有u或U后缀)。例:1.23e5f;1.23l; -123.45f。