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超长整形详解相关推荐

  1. C++11 并发指南四(future 详解三 std::future std::shared_future)

    上一讲<C++11 并发指南四(<future> 详解二 std::packaged_task 介绍)>主要介绍了 <future> 头文件中的 std::pack ...

  2. C++11 并发指南四(future 详解二 std::packaged_task 介绍)

    上一讲<C++11 并发指南四(<future> 详解一 std::promise 介绍)>主要介绍了 <future> 头文件中的 std::promise 类, ...

  3. C++11 并发指南三(Lock 详解)(转载)

    multithreading 多线程 C++11 C++11多线程基本使用 C++11 并发指南三(Lock 详解) 在 <C++11 并发指南三(std::mutex 详解)>一文中我们 ...

  4. Oracle Golden Gate 11.2.0.3安装详解

    Oracle Golden Gate 11.2.0.3安装详解 环境 环境变量 安装OGG软件 开始OGG配置 配置源端数据库 源端OGG配置 配置目标端数据库 目标端OGG配置 开启同步 环境 ce ...

  5. 11.定时任务定时线程池详解

    3.1 新增定时任务池 11.定时任务&定时线程池详解 ​ 当我们不用任务框架时,我们想自己写一个定时任务时,我们能想起那个工具类呢?Timer ?还有吗?不知道了,下面我们要讲下Schedu ...

  6. C++11 并发指南四(future 详解一 std::promise 介绍)

    前面两讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三(std::mutex 详解)>分别介绍了 std::thread 和 std::m ...

  7. C++11 并发指南三(Lock 详解)

    在 <C++11 并发指南三(std::mutex 详解)>一文中我们主要介绍了 C++11 标准中的互斥量(Mutex),并简单介绍了一下两种锁类型.本节将详细介绍一下 C++11 标准 ...

  8. C++11 并发指南------std::thread 详解

    参考: https://github.com/forhappy/Cplusplus-Concurrency-In-Practice/blob/master/zh/chapter3-Thread/Int ...

  9. 黑猫带你学UFS协议第11篇:两万字详解UFS协议信息单元(UPIU)

    1 前言 本文依据UFS3.1 JEDEC协议.网络资料及个人工作经验整理而成,如有错误请留言. 文章为个人辛苦整理,付费内容,禁止私自转载. 本文结合UFS3.1 JEDEC协议手册查看效果更佳. ...

最新文章

  1. Python学习--not语句
  2. 负载均衡环境中和如何设置Expires和Etag
  3. task一个任务结束后执行另一个操作
  4. 【OpenCV】cv::Mat对单个像素的访问和操作
  5. Linux 命令之 make -- GNU的工程化编译工具
  6. Linux下弹出CDROM的程序(参考网上程序)
  7. SQlite 发布3.2.5版本
  8. 前端实践(1)——加载显示word文档内容
  9. IEEE 1588 Sync报文单步时间戳
  10. 酷软正在连接服务器,蜗牛星际:我的B款双网口机箱PVE+爱快+LEDE 双软路由 保姆级教程...
  11. bypassing waf's in sql injection
  12. ecshop二次开发手册【基本结构】
  13. 分布式丛林探险系列之 Redis 主从复制模式
  14. 社区综合管理系统springboot+vue
  15. PHP取出数组中随机一条字符串
  16. linux 批量删掉进程
  17. RISCV--汇编指令
  18. 好玩的python3代码_python好玩的项目—色情图片识别代码分享
  19. 互联网时代,用小众语言对抗焦虑和内卷!
  20. 【Github Action】使用ssh-deploy上传文件的小坑

热门文章

  1. Apache/php7.4/Mariadb安装和报错解决办法
  2. 七类最危险的网络管理员
  3. CentOS 6.5开放端口与查看端口状态
  4. [Python错误]NameError: name ‘name’ is not defined
  5. 掌财社寒山:腾讯“王者荣耀”被告上法庭:游戏形象设计过于暴露 篡改历史践踏文化
  6. nginx(九)find_config阶段的location指令
  7. 51nod-1535 深海探险
  8. 力扣(LeetCode)36. 有效的数独(2022.02.05)
  9. Docker镜像、容器操作
  10. 【老系统改造】---登陆页面加验证码