Chinaunix首页 | 论坛 | 博客
  • 博客访问: 848066
  • 博文数量: 756
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 4980
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:40
文章分类

全部博文(756)

文章存档

2011年(1)

2008年(755)

我的朋友

分类:

2008-10-13 16:10:50

很多人喜欢写 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) |
给主人留下些什么吧!~~