long long整形

发布时间 2023-12-04 16:59:04作者: Beasts777

文章参考:爱编程的大丙 (subingwen.cn)

1. 定义

C++11标准要求long long类型在不同平台有不同的长度,但至少有64位,它分为两种:

  • long long 类型:后面需要加上LLll的后缀。

    long long num1 = 123456789LL;
    long long num2 = 123456789ll;
    
  • unsigned long long类型:后面加上ull(不区分大小写)的后缀

    unsigned long long num1 = 123456789ULL;
    unsigned long long num2 = 123456789ull;
    unsigned long long num3 = 123456789uLL;
    unsigned long long num4 = 123456789Ull;
    
    

在C++11中,long long实际上等价于:

  • long long int
  • signed long long
  • signed long long int

2. 范围

long long大小与平台有关,查看当前平台long long的大小,和查看其它整形大小一致,通过<climits>或者<limits.h>中定义的宏:

  • LLONG_MIN:最小的long long值。
  • LLONG_MAX:最大的long long值。
  • ULLONG_MAX:最大的无符号long long值。

EG:

  • 代码:

    #include <iostream>                                                                               
    #include <climits> 
    using namespace std;
    
    int main(void){
        long long max = LLONG_MAX;
        long long min = LLONG_MIN;
        unsigned long long u_max = ULLONG_MAX;
        cout << "long long max value = " << max << endl;
        cout << "long long min value = " << min << endl;
        cout << "unsigned long long max value = " << u_max << endl;
        return 0;
    }   
    
  • 输出:

    long long max value = 9223372036854775807
    long long min value = -9223372036854775808
    unsigned long long max value = 18446744073709551615
    

3. 扩展的整形

C++11中只定义了下面5种标准的有符号整形:

  • signed char
  • short int
  • int
  • long int
  • long long int

此外,标准也规定了每一种有符号整形必须对应一个无符号整形,占用位数不变。

4. 隐式类型转换

C++中允许隐式类型转换,转换原则如下:

  • 转换过程中,低等级转换为高等级,有符号转换为无符号。
  • 长度越大的整形等级越高。例如long long int等级大于int
  • 长度相同的情况下,标准整形的等级高于扩展类型。例如long long intint64都是64位长度,而long long int等级更高。
  • 相同大小的有符号类型和无符号类型的等级相同。如long long intunsigned long long int等级相同,但如果二者要进行转换,则应该由有符号的转换为无符号的。
  • 注意:C++中禁止对(void *)类型的隐式转换。