Long Long、__int64使用总结

前言:   在16位环境下,int/unsigned int 占16号,long/unsigned
long占32各类   在32各类环境下,int占32各项,unsigned
int占16各,long/unsigned long占32各 何时需用:   long 和 int
范围是[-2^31,2^31),即-2147483648~2147483647,而unsigned范围是[0,2^32),即0~4294967295,所以常规的32各类整数只会处理40亿横,当遇比40亿老之大多之高频便假设因此到64员。
64员使用范围:
  不同的编译器对64位整数的扩张有所不同,VC使用__int64/unsigned
__int64,范围是[-2^63,
2^63)和[0,2^64),即-9223372036854775808~9223372036854775807与
0~18446744073709551615(约1800亿亿)。 注意点:
1、编译器不同造成使用64个之阐发方式不同; 2、long long / unsigned long
long 一般是Linux下表方式、如:G++ 3、__int64 /unsigned
__int64一般是Windows下使用64各之阐明方式,如:VS
4、在赋值时需专注加上ll进行显式赋值; 5、当进行64位与
32位之夹运算时,32号整数会给隐式转换成为64各类整数。
6、输出printf(“”);,long
long使用%lld输出,__int64使用%I64d,无符号使用u替代d即可。
7、测试下来编译器一般还支持2种操作,不必太过纠结,怎么动看个人好。

//=================================华丽的相间线========================================
#include <stdio.h> #include <stdlib.h> intmain(){    
unsigned long longa= 412432424000ll;     unsigned __int64b=
9223372036854775808ll;     printf(“%I64u\n”,a);         
       //使用%lld时束手无策正常输出,why? 解答在附    
printf(“%I64u”,b);     system(“pause”);     return 0; } 附网友测试结果:
  刚实验了生,在VC6、DEV、CodeBlocks中C语言都足以采用__int64,格式化输出标识也%I64d。不过在VC6受到数字后加2个L是碰头报错,可以只加1单或非加。查了下资料,__int64是windows专用的,被vc、gcc等编译器支持,但每当当UNIX、Linux中需要用long
long配合%lld。后者是标准C的确定!   我试了产long
long配合%I64d,可以是输出,而无论是是long
long还是__int64配合%lld都不可知正确输出。所以我得出的结论是当windows下用用longlong或,__int64配合%64d。而在UNIX、Linux中务必利用标准C规定之long
long配合%lld。 记。