很多人喜欢写 float f = 1.0; 这是不严格的,严格的应该写成 float f = 1.0f;
为此总结了一些修饰规则供大家参考: ( 以下修饰字符不区分大小写 )
a. 不加任何修饰的整数值类型是 int
b. 不加任何修饰的浮点数值类型是 double, 而不是 float
c. 如果数值过大int/double不能容纳, 则最小限度的扩张( VC5.0及之后的版本取消了80bit的浮点类型所以double无法扩张 )(见文章最后的红字补充)
d. u 表示 unsigned
e. l 表示 long ( 不要忘了long可以修饰整型也可以修饰浮点型,比如 long double )
#include
using namespace std;
int main()
{
cout << typeid( 0 ).name() << endl; // int
cout << typeid( 0u ).name() << endl; // unsigned int
cout << typeid( 0l ).name() << endl; // long
cout << typeid( 0ul ).name() << endl; // unsigned long
cout << typeid( 0.0 ).name() << endl; // double
cout << typeid( 0.0f ).name() << endl; // float
cout << typeid( 0.0l ).name() << endl; // long double
cout << "--------------------------------------\n";
cout << typeid( 0xFFFFFFFF ).name() << endl; // unsigned int 可以容纳得下
cout << typeid( 0xFFFFFFFFFF ).name() << endl; // 只有 __int64 可以容纳得下
cout << typeid( 0xFFFFFFFFFFFFFFFF ).name() << endl; // 只有 unsigned __int64 可以容纳得下
system("PAUSE");
return 0;
}
2004-07-14补充:对于C规则:《C++ program language》上说对于不同进制的立即数在自动扩张时的规则有所区别。
在C++中,long long 还不是一个标准的关键字(C中long long已经是标准类型了,C++中即将也是)
VC++中使用 I64 来修饰 __int64, 使用 uI64 来修饰 unsigned __int64(古老的VC6是这样,新的VC8已经支持标准的ll和ull了)
GCC 中使用 ll 来修饰 long long, 使用 ull 来修饰 unsigned long long
VC++中的 __int64 等同于 GCC中的 long long
--------------------next---------------------
阅读(431) | 评论(0) | 转发(0) |