关于基本类型中的整型,默认的一些 short、int、long 等大家都比较熟悉。int、long 占用 4 个字节32位,最大能表示的无符号正整数也才是 4294967295,也就是 42亿多。现如今社会中各种各样的数量需要整型来表示,但数目已远远超过 4294967295,比如当今的世界人口,等等。比如开发过程中经常要用到的毫秒级时间戳,即代表从1970年到现在为止经过的毫秒数。这些数值都超过了 4294967295,普通的 int 和 long 已经无法表示的下了,所以又出现占用 8个字节的64位整型:long long、_int64、__int64,其无符号能表示的最大正整数是:18446744073709551615,已经非常大了。。。可为什么有三种?下面给大家说下!
C99标准以前:
64位整型是一种没有明确规范的数据类型,各种主流的编译器对64位整型的支持也是标准不一,形态各异。于是便出了 long long、_int64、__int64 这么几种;
C99标准推出:
C99将 long long 纳入到 C++标准中,并规定 long long 类型的位数不低于64位;
Linux上GCC从4.5版本开始,完全支持C99标准,因此可以使用 long long 表示64位整数;
Windows 下 VC6.0 是1998年推出的,所以不支持C99标准,但是Windows为了支持64位整型,自己提供了__int64 类型来表示64位整数,VC6.0中还可以使用少一个下划线的版本 _int64
C++11标准推出:
long long 进入了 C++11 标准,同样定义为位数不低于64位;
GCC4.8开始支持 C++11,将 long long 型定义为64位,Visual Studio 2013 开始支持 C++11,同样将 long long 定义为64位。