long long 整形

        相比于C++98标准,C++11整型的最大改变就是多了long long。但事实上,long long 整型本来就离C++标准很近,早在1995年,long long 就被提议写入 C++98标准,却被C++标准委员会拒绝了。而后来,long long类型却进入了C99标准,而且也事实上也被很多编译器支持。于是辗转地,C++标准委员会又掉头决定将 long long纳入 C++11标准。

1. long long 类型

C++11 标准要求 long long 整型可以在不同平台上有不同的长度,但至少有64位。long long 整型有两种∶

  • long long - 对应类型的数值可以使用 LL (大写) 或者 ll (小写) 后缀
long long num1 = 123456789LL;
long long num2 = 123456789ll;
  • unsigned long long - 对应类型的数值可以使用 ULL (大写) 或者 ull (小写) 或者 Ull、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

对于无符号类型的unsigned long long 和unsigned long long int是等价的

同其他的整型一样,要了解平台上 long long大小的方法就是查看<climits>(或<limits. h> )中的宏与long long整 型相关的一共有3个:

  • LLONG_MIN - 最小的long long值
  • LLONG_MAX - 最大的long long 值
  • ULLONG MAX - 最大的 unsigned long long 值

测试代码如下:

#include <iostream>
using namespace std;

int main()
{
    long long max = LLONG_MAX;
    long long min = LLONG_MIN;
    unsigned long long ullMax = ULLONG_MAX;

    cout << "Max Long Long value: " << max << endl
        << "Min Long Long value: " << min << endl
        << "Max unsigned Long Long value: " << ullMax << endl;
    return 0;
}

程序输出的结果:

Max Long Long value: 9223372036854775807
Min Long Long value: -9223372036854775808
Max unsigned Long Long value: 18446744073709551615

        可以看到 long long 类型能够存储的最大/最小值还是非常大/小的,但是这个值根据平台不同会有所变化,原因是因为C++11标准规定该类型至少占8字节,它占的字节数越多,对应能够存储的数值也就越大。

2. 扩展的整形

在C++11中一共只定义了以下5种标准的有符号整型:

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

        标准同时规定,每一种有符号整型都有一种对应的无符号整数版本,且有符号整型与其对应的无符号整型具有相同的存储空间大小。比如与 signed int对应的无符号版本的整型是 unsigned int。

        当我们在C++中处理数据的时候,如果参与运算的数据或者传递的参数类型不匹配,整型间会发生隐式的转换,这种过程通常被称为整型的提升。比如如下表达式∶

(int)num1 + (long long)num2

关于这种整形提升的隐式转换遵循如下原则:

  • 长度越大的整型等级越高,比如 long long int 的等级会高于int。
  • 长度相同的情况下,标准整型的等级高于扩展类型,比如 long long int 和 int64 如果
都是64 位长度,则long long int类型的等级更高。

  • 相同大小的有符号类型和无符号类型的等级相同,long long int 和unsigned longlong 
int的等级就相同。
  • 转换过程中,低等级整型需要转换为高等级整型,有符号的需要转换为无符号整形。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值