c++基础之long long

本文介绍了C++11标准中longlong类型的引入及其重要性。在C++11之前,各编译器环境提供了不同的64位整数类型,导致代码兼容性问题。C++11通过定义longlong解决了这一问题,并规定了longlong字面值类型的表示方法。

long long类型

数据类型long long是在C++11中重新定义的,标准规定它最小是64bit。

在这之前为了提供超过32bit的整数,各个开发环境(编译器)分别定义了各自的64bit整数类型。结果当然就是影响了代码地兼容性。

现在好了。C++11直接定义了long long类型。

我猜许多人应该使用过这个类型,当然在C++11之前,这种尝试会被编译器无情拒绝,自C++11之后就不会在发生这样地情况了。因此我认为:在C++11新特性中,long long一定是最容易被接受的一个。多数程序员看到它时甚至不会意识到这是一个新特性。

相应地,C++11规定:在指定long long字面值类型时,使用ll或LL。这也可以从long的l或L推断出来。

另外,也可以像long类型字面值一样使用U后缀已表明这时一个无符号数。

2LL

3ll

100ULL

小写的ll虽然合法,但是容易和数字1混淆,还是用大写的吧。

C++中,`long long`和`long`都是整数类型,但它们的**大小范围**和**使用场景**有所不同。以下是详细对比和示例: --- ### **1. 大小范围** | 类型 | 典型大小(字节) | 范围(有符号) | 范围(无符号) | |------------|------------------|------------------------------------|------------------------------| | `long` | 4 或 8 | -2³¹ 到 2³¹-1(32位系统)<br>-2⁶³ 到 2⁶³-1(64位系统) | 0 到 2³²-1(32位)<br>0 到 2⁶⁴-1(64位) | | `long long`| 8 | -2⁶³ 到 2⁶³-1 | 0 到 2⁶⁴-1 | - **关键区别**: - `long long` **至少保证 8 字节**(64位),而`long`的大小依赖平台(可能是4字节或8字节)。 - 在32位系统中,`long`和`int`可能相同;在64位系统中,`long`通常与`long long`一样大(但标准未强制要求)。 --- ### **2. 使用场景** - **`long`**: - 适用于一般大整数,但需注意平台差异(例如,32位系统中可能溢出)。 - 示例:`long a = 2147483647;`(32位`int`最大值,但用`long`更安全)。 - **`long long`**: - 需要**明确保证64位范围**时使用(如处理大数或位运算)。 - 示例:`long long b = 9223372036854775807LL;`(`long long`的最大值)。 --- ### **3. 代码示例** ```cpp #include <iostream> #include <climits> // 用于查看类型范围 int main() { std::cout << "long 的大小: " << sizeof(long) << " 字节\n"; std::cout << "long long 的大小: " << sizeof(long long) << " 字节\n"; long a = LONG_MAX; // 平台相关的最大值 long long b = LLONG_MAX; // 固定为 2^63-1 std::cout << "long 最大值: " << a << "\n"; std::cout << "long long 最大值: " << b << "\n"; return 0; } ``` **输出示例(64位系统)**: ``` long 的大小: 8 字节 long long 的大小: 8 字节 long 最大值: 9223372036854775807 long long 最大值: 9223372036854775807 ``` --- ### **4. 注意事项** - **可移植性**:如果代码需跨平台运行,`long long`比`long`更可靠(尤其是需要64位整数时)。 - **格式化输出**:使用`%lld`(C风格)或`std::cout`(C++风格)输出`long long`。 - **字面量后缀**:`long long`字面量需加`LL`后缀,如`100LL`。 --- ### **5. 性能影响** - 在大多数现代系统中,`long`和`long long`的性能差异可以忽略,但`long long`可能占用更多内存(尤其在数组中)。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发如雪-ty

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值