C++11 long long超长整形详解
C++11 long long超长整形详解
C++ 11 标准中,基于整数大小的考虑,共提供了如表 1 所示的这些数据类型。与此同时,标准中还明确限定了各个数据类型最少占用的位数。
表 1 C++11标准中所有的整形数据类型
整数类型 | 等价类型 | C++11标准规定占用最少位数 |
---|---|---|
short | short int(有符号短整型) | 至少 16 位(2 个字节) |
signed short | short int(有符号短整型) | 至少 16 位(2 个字节) |
signed short int | short int(有符号短整型) | 至少 16 位(2 个字节) |
unsigned short | unsigned short int(无符号短整型) | 至少 16 位(2 个字节) |
unsigned short int | unsigned short int(无符号短整型) | 至少 16 位(2 个字节) |
int | int(有符号整形) | 至少 16 位(2 个字节) |
signed | int(有符号整形) | 至少 16 位(2 个字节) |
signed int | int(有符号整形) | 至少 16 位(2 个字节) |
unsigned | unsigned int(无符号整形) | 至少 16 位(2 个字节) |
unsigned int | unsigned int(无符号整形) | 至少 16 位(2 个字节) |
long long | int(有符号长整形) | 至少 32 位(4 个字节) |
long int | int(有符号长整形) | 至少 32 位(4 个字节) |
signed long | int(有符号长整形) | 至少 32 位(4 个字节) |
signed long int | int(有符号长整形) | 至少 32 位(4 个字节) |
unsigned long | unsigned long int(无符号长整形) | 至少 32 位(4 个字节) |
unsigned long int | unsigned long int(无符号长整形) | 至少 32 位(4 个字节) |
long long(C++11) | long long int(有符号超长整形) | 至少 64 位(8 个字节) |
long long int(C++11) | long long int(有符号超长整形) | 至少 64 位(8 个字节) |
signed long long(C++11) | long long int(有符号超长整形) | 至少 64 位(8 个字节) |
signed long long int(C++11) | long long int(有符号超长整形) | 至少 64 位(8 个字节) |
unsigned long long(C++11) | unsigned long long int(无符号超长整型) | 至少 64 位(8 个字节) |
unsigned long long int(C++11) | unsigned long long int(无符号超长整型) | 至少 64 位(8 个字节) |
C++11 标准规定,每种整数类型必须同时具备有符号(signed)和无符号(unsigned)两种类型,且每种具体的有符号整形和无符号整形所占用的存储空间(也就是位数)必须相同。注意,C++11 标准中只限定了每种类型最少占用多少存储空间,不同的平台可以占用不同的存储空间。
在表 1 罗列的这些数据类型中,long long 超长整型是 C++ 11 标准新添加的,接下来就对该整数类型做具体的介绍。
说道 C++ 标准委员会将 long long 整形写入 C++ 11 标准中,其实早在 1995 年,就有人提议将 long long 整形写入 C++ 98 标准,但被委员会拒绝了。而后 long long 整形被 C99 标准(C语言标准之一)采纳,并逐渐被很多编译器支持,于是 C++ 标准委员会重新决定将 long long 整形写入 C++ 11 标准中。
如同 long 类型整数需明确标注 “L” 或者 “l” 后缀一样,要使用 long long 类型的整数,也必须标注对应的后缀:
对于有符号 long long 整形,后缀用 “LL” 或者 “ll” 标识。例如,“10LL” 就表示有符号超长整数 10;
对于无符号 long long 整形,后缀用 “ULL”、“ull”、“Ull” 或者 “uLL” 标识。例如,“10ULL” 就表示无符号超长整数 10;
如果不添加任何标识,则所有的整数都会默认为 int 类型。
对于任意一种数据类型,读者可能更关心的是此类型的取值范围。对于 long long 类型来说,如果想了解当前平台上 long long 整形的取值范围,可以使用头文件中与 long long 整形相关的 3 个宏,分别为 LLONG_MIN、LLONG_MAX 和 ULLONG_MIN:
LLONG_MIN:代表当前平台上最小的 long long 类型整数;
LLONG_MAX:代表当前平台上最大的 long long 类型整数;
ULLONG_MIN:代表当前平台上最大的 unsigned long long 类型整数(无符号超长整型的最小值为 0);
举个例子:
#include <iostream>
#include <iomanip>
#include <climits>
using namespace std;
int main()
{cout <<"long long最大值:" << LLONG_MIN <<" "<< hex << LLONG_MIN <<"\n";cout << dec <<"long long最小值:" << LLONG_MAX << " " << hex << LLONG_MAX << "\n";cout << dec << "unsigned long long最大值:" << ULLONG_MAX << " " << hex << ULLONG_MAX;return 0;
}
程序执行结果为(不唯一):
long long最大值:-9223372036854775808 8000000000000000
long long最小值:9223372036854775807 7fffffffffffffff
unsigned long long最大值:18446744073709551615 ffffffffffffffff
关于整形在内存中到底是如何存储的,读者可阅读《整数在内存中是如何存储的,为什么它堪称天才般的设计》一节。
此程序中,输出了各最大值和最小值对应的十六进制,显然在当前平台(Windows10 64位操作系统)上,long long 超长整型占用 64 位(也就是 16 个字节)的存储空间。读者可自行在自己的机器上运行此段代码,即可轻松得知 long long 类型在自己机器上所占用的字节数。
C++11 long long超长整形详解相关推荐
- C++11 并发指南四(future 详解三 std::future std::shared_future)
上一讲<C++11 并发指南四(<future> 详解二 std::packaged_task 介绍)>主要介绍了 <future> 头文件中的 std::pack ...
- C++11 并发指南四(future 详解二 std::packaged_task 介绍)
上一讲<C++11 并发指南四(<future> 详解一 std::promise 介绍)>主要介绍了 <future> 头文件中的 std::promise 类, ...
- C++11 并发指南三(Lock 详解)(转载)
multithreading 多线程 C++11 C++11多线程基本使用 C++11 并发指南三(Lock 详解) 在 <C++11 并发指南三(std::mutex 详解)>一文中我们 ...
- Oracle Golden Gate 11.2.0.3安装详解
Oracle Golden Gate 11.2.0.3安装详解 环境 环境变量 安装OGG软件 开始OGG配置 配置源端数据库 源端OGG配置 配置目标端数据库 目标端OGG配置 开启同步 环境 ce ...
- 11.定时任务定时线程池详解
3.1 新增定时任务池 11.定时任务&定时线程池详解 当我们不用任务框架时,我们想自己写一个定时任务时,我们能想起那个工具类呢?Timer ?还有吗?不知道了,下面我们要讲下Schedu ...
- C++11 并发指南四(future 详解一 std::promise 介绍)
前面两讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三(std::mutex 详解)>分别介绍了 std::thread 和 std::m ...
- C++11 并发指南三(Lock 详解)
在 <C++11 并发指南三(std::mutex 详解)>一文中我们主要介绍了 C++11 标准中的互斥量(Mutex),并简单介绍了一下两种锁类型.本节将详细介绍一下 C++11 标准 ...
- C++11 并发指南------std::thread 详解
参考: https://github.com/forhappy/Cplusplus-Concurrency-In-Practice/blob/master/zh/chapter3-Thread/Int ...
- 黑猫带你学UFS协议第11篇:两万字详解UFS协议信息单元(UPIU)
1 前言 本文依据UFS3.1 JEDEC协议.网络资料及个人工作经验整理而成,如有错误请留言. 文章为个人辛苦整理,付费内容,禁止私自转载. 本文结合UFS3.1 JEDEC协议手册查看效果更佳. ...
最新文章
- Python学习--not语句
- 负载均衡环境中和如何设置Expires和Etag
- task一个任务结束后执行另一个操作
- 【OpenCV】cv::Mat对单个像素的访问和操作
- Linux 命令之 make -- GNU的工程化编译工具
- Linux下弹出CDROM的程序(参考网上程序)
- SQlite 发布3.2.5版本
- 前端实践(1)——加载显示word文档内容
- IEEE 1588 Sync报文单步时间戳
- 酷软正在连接服务器,蜗牛星际:我的B款双网口机箱PVE+爱快+LEDE 双软路由 保姆级教程...
- bypassing waf's in sql injection
- ecshop二次开发手册【基本结构】
- 分布式丛林探险系列之 Redis 主从复制模式
- 社区综合管理系统springboot+vue
- PHP取出数组中随机一条字符串
- linux 批量删掉进程
- RISCV--汇编指令
- 好玩的python3代码_python好玩的项目—色情图片识别代码分享
- 互联网时代,用小众语言对抗焦虑和内卷!
- 【Github Action】使用ssh-deploy上传文件的小坑
热门文章
- Apache/php7.4/Mariadb安装和报错解决办法
- 七类最危险的网络管理员
- CentOS 6.5开放端口与查看端口状态
- [Python错误]NameError: name ‘name’ is not defined
- 掌财社寒山:腾讯“王者荣耀”被告上法庭:游戏形象设计过于暴露 篡改历史践踏文化
- nginx(九)find_config阶段的location指令
- 51nod-1535 深海探险
- 力扣(LeetCode)36. 有效的数独(2022.02.05)
- Docker镜像、容器操作
- 【老系统改造】---登陆页面加验证码