long long 整形

long long 整形相比于 C 98 标准 C 11 整型的最大改变就是多了 longlong

大家好,欢迎来到IT知识分享网。

        相比于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 = LL; long long num2 = ll;
  • unsigned long long – 对应类型的数值可以使用 ULL (大写) 或者 ull (小写) 或者 Ull、uLL (等大小写混合)后缀
unsigned long long num1 = ULL; unsigned long long num2 = ull; unsigned long long num3 = uLL; unsigned long long num4 = Ull;

事实上在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:  Min Long Long value: - Max unsigned Long Long value: 

        可以看到 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的等级就相同。
  • 转换过程中,低等级整型需要转换为高等级整型,有符号的需要转换为无符号整形。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/145056.html

(0)
上一篇 2025-04-22 15:45
下一篇 2025-04-22 16:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信