C++中longlong与__int64


long long:

        在C语言的C99标准扩展了新的整数类型long long,long是32位宽,占4字节,long long通常被定义成64位宽,也就可以实现了32位及其上可以扩展8字节的数据,GUN C也支持,当然在64位平台上就存在这个问题了。C99标准并没有硬性规定具体到某种平台上的某种整数类型究竟占用多少字节、能够表示多大范围的数值等,只是给出一条原则和一个参考数值集合,只要同时满足这两方面条件就算是符合C标准。

{   

      C99标准中说:  long long的级别高于long,long的级别高于int,int的级别高于short,short的级别高于char。(另外有_Bool永远是最低级别)。级别高的整数类型的宽度大于等于级别较低的整数类型。

}

用long long写代码,既可以用:

long long num;

cin>>num;

cout<<num;

也可以用:

scanf("%IId",&num);

printf("%IId",num);

若用unsigned long long 则将%IId改成%IIu即可

(Dev-C++的g++编译器,它使用的是"%I64d"而非"%IId")


PS: 编译long long需要支持C99标准的编译器才行,VC并不支持,但也有对应的类型__int64(两个_)


__int64:

          VC的64位整数分别叫做__int64和unsigned__int64,其范围分别是[-2^63,2^63)与[0,2^64),对64位整数的运算与32位整数基本相同,都支持四则运算与位运算等。当进行64位与32位的混合运算时,32位整数会被隐式转换成64位整数。但是,VC的输入输出与__int64的兼容就不是很好了,如果写下下面这段代码:

    __int64 num;

   cin>>num;

   cout<<num;

那么将会编译错误,于是,可以使用C的写法:

  scanf("%I64d",&num);

  printf("%I64d",num);

当用unsigned __int64时,把"%I64d"改为“%I64u”就可以了


你可能感兴趣的:(C++中longlong与__int64)