数据类型int、long、longlong、固定长度类型的选择

在 C/C++ 中,intlong 、long long是三种常用的整数类型它们的大小和范围可能因平台和编译器而异。


int

              大小:通常为 4 字节(32 位)。
              范围:-2^31~2^31-1(10^9数量级)
              用途

                           1.适合大多数通用场景,例如计数器、数组索引、简单的数学运算等。

                           2.是 C/C++ 中最常用的整数类型,性能通常较好。

              选择建议:如果数值范围在 ±21 亿以内,优先使用 int

long

              大小:在 32 位系统上,通常为 4 字节(32 位),范围: int 相同。
                         在 64 位系统上,通常为 8 字节(64 位),范围: -2^63~2^63-1(10^18数量级)
              用途:

                       1.适合需要更大范围的整数,但仍然需要考虑平台兼容性。

                       2.在 32 位系统上,long 和 int 可能没有区别。

              选择建议:

                       如果需要更大的范围(例如超过 ±21 亿),并且代码主要在 64 位系统上运行,可以使用 long。

                       如果需要跨平台兼容性,建议使用固定长度的类型(如 int64_t)。


long long

             大小:固定为 8 字节(64 位)。
             范围:-2^63~2^63-1(10^18数量级)
             用途

                      1.适合需要非常大范围的整数,例如时间戳、大数计算等。

                      2.是 C99 标准引入的,具有固定的 64 位长度,跨平台兼容性更好。

             选择建议:

                      如果数值范围超过 int 或 long 的范围,优先使用 long long。

                      如果需要明确的 64 位整数,优先使用 long long 而不是 long。


固定长度类型

              为了确保代码的可移植性和一致性,C/C++ 提供了固定长度的整数类型

                                          (定义在 <stdint.h> 或 <cstdint> 中)  

                     int32_t:固定 32 位整数,范围与 int 相同。

                     int64_t:固定 64 位整数,范围与 long long 相同。

                     uint32_t 和 uint64_t:无符号版本。

               选择建议:如果需要明确的位数和跨平台兼容性,优先使用固定长度类型(如 int32_t 或 int64_t)。

总结

数据类型大小(字节)范围使用场景
int-2^31~2^31-1(10^9数量级)通用场景,性能优先
long4或8

32位机:同int

64位机:同long long

需要更大范围,但平台兼容性不确定
long long8-2^63~2^63-1(10^18数量级)需要非常大范围,跨平台兼容性好
int32_t同int 需要明确32位整数,跨平台兼容
int64_t8同long long需要明确64位整数,跨平台兼容

### 数据类型长度和取值范围 在编程中,数据类型决定了变量所占用的存储空间大小以及其取值范围。不同的编译器、操作系统和位数(如32位或64位)可能会影响这些数据类型的字节数和取值范围。 #### `int` 数据类型 - **字节数**:通常在32位系统和编译器中,`int` 占用 **4个字节**(32位)[^3]。 - **取值范围**:由于使用补码表示,`int` 的取值范围为 **-2147483648 到 2147483647**(即 $-2^{31}$ 到 $2^{31}-1$)[^3]。 #### `unsigned long long` 数据类型 - **字节数**:无论在32位还是64位系统中,`unsigned long long` 始终占用 **8个字节**(64位)[^1]。 - **取值范围**:由于是无符号类型,其取值范围为 **0 到 18446744073709551615**(即 $0$ 到 $2^{64}-1$)。 #### 编译器和系统架构的影响 - 在 **16位系统** 中,`int` 占用 **2个字节**(16位),取值范围为 **-32768 到 32767**[^3]。 - 在 **32位系统** 中,`int` 占用 **4个字节**(32位),取值范围为 **-2147483648 到 2147483647**[^3]。 - 在 **64位系统** 中,`int` 仍然占用 **4个字节**(32位),但 `long` 可能占用 **8个字节**(64位)。 #### 代码示例 以下是一个简单的C++代码示例,用于打印 `int` 和 `unsigned long long` 的字节数和取值范围: ```cpp #include <iostream> #include <climits> #include <cstdint> int main() { std::cout << "Size of int: " << sizeof(int) << " bytes" << std::endl; std::cout << "Range of int: " << INT_MIN << " to " << INT_MAX << std::endl; std::cout << "Size of unsigned long long: " << sizeof(unsigned long long) << " bytes" << std::endl; std::cout << "Range of unsigned long long: 0 to " << ULLONG_MAX << std::endl; return 0; } ``` #### 数据类型字节数总结 | 数据类型 | 32位系统 | 64位系统 | |------------------|----------|----------| | `int` | 4字节 | 4字节 | | `long` | 4字节 | 8字节 | | `long long` | 8字节 | 8字节 | | `unsigned long long` | 8字节 | 8字节 | #### 总结 - `int` 通常占用 **4个字节**,取值范围为 **-2147483648 到 2147483647**。 - `unsigned long long` 占用 **8个字节**,取值范围为 **0 到 18446744073709551615**。 - 在不同系统和编译器中,数据类型的字节数可能会有所不同,尤其是在 `long` 类型上。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值