整形short、int、long和long long

转载自:  http://www.miss77.net/638.html

整形short、int、long和long long
C++的short、int、long和long long类型通过使用不同数目的位来存储值(关于位的概念自行了解),最多能够表示4中不同的整数宽度。C++提供了一种灵活的标准,它确保了最小长度(从C语言借鉴而来),如下:
1. short 至少16位
2. int 至少与 short 一样长
3. long 至少 32 位,且至少与 int 一样长
4. long long 至少64位,且至少与 long 一样长 (此类型为 C++11 新增,旧的编译器可能不支持)




当前很多系统都使用最小长度,即short为16位,long为32位。这仍然为int提供了多种选择,其宽度可以是16位、24位或32位,同时又符合标准;甚至可以是64位,因为long 和 long long 至少长64位。通常,在老式的 IBM PC 的实现中,int的宽度为16位(与short相同),而在Windows XP及以上、Mac OS X、VAX和很多其它微型计算机的实现中为32位,与long相同。
要知道系统中整数的最大长度,可以在程序中使用 C++ 工具来检查类型的长度。首先,sizeof 运算符返回类型或变量的长度,单位为字节。需要注意的是,“字节”的含义依赖于实现,因此在一个系统中,两字节的int可能是16位,而在另一个系统中可能是32位。其次,头文件 climits(在老式实现中为 limits.h)中包含了关于整形限制的信息,它定义了表示各种限制的符号名称。例如,INT_MAX 为 int 的最大取值, CHAR_BIT 为字节的位数。


演示代码

#include <iostream>
#include <climits>
using namespace std;
int main()
{
    int n_int = INT_MAX; //max value for integer number
    short n_short = SHRT_MAX;
    long n_long = LONG_MAX;
    long long n_llong = LLONG_MAX;
    cout << "int is " << sizeof (int) << " bytes." << endl;
    cout << "short is " << sizeof n_short << " bytes." << endl;
    cout << "long is " << sizeof n_long << " bytes." << endl;
    cout << "long long is " << sizeof n_llong << " bytes." << endl;
    cout << endl;
    cout << "Maximum values: " << endl;
    cout << "int: " << n_int << endl;
    cout << "short: " << n_short << endl << "long: " << n_long << endl << "long long: " << n_llong << endl << endl;
    cout << "Minimum int value = " << INT_MIN << endl;
    cout << "Bits per byte = " << CHAR_BIT << endl;
    return 0;
}

运行结果如下(环境:Windows 7 64位,VC++ 2008 sp1, SDK 6.1):
int is 4 bytes.
short is 2 bytes.
long is 4 bytes.
long long is 8 bytes.

Maximum values:
int: 2147483647
short: 32767
long: 2147483647
long long: 9223372036854775807

Minimum int value = -2147483648
Bits per byte = 8

下面来看一下上述程序的主要编程特性

1. 运算符 sizeof 和头文件 climits
sizeof 运算符指出,在使用8位字节的系统中,int的长度为4个字节。可对类型名或变量名使用 sizeof 运算符。对类型名(如 int)使用 sizeof 运算符是,应将名称放在括号中;但对变量名括号是可选的。
头文件 climits 定义了符号常量来表示类型的限制。编译器厂商提供了 climits 文件,该文件指出了其编译器中的值。
下面将依次列举一些 climits 中的符号常量

  1. CHAR_BIT :char的位数
  2. CHAR_MAX :char的最大值
  3. CHAR_MIN :char的最小值
  4. SCHAR_MAX :signed char的最大值
  5. SCHAR_MIN :signed char的最小值
  6. UCHAR_MAX :unsigned char的最大值
  7. SHRT_MAX :short 的最大值
  8. SHRT_MIN :short 的最小值
  9. USHRT_MAX :unsigned short 的最大值
  10. INT_MAX :int 的最大值
  11. INT_MIN :int 的最小值
  12. UINT_MAX :unsigned int 的最大值
  13. LONG_MAX :long 的最大值
  14. LONG_MIN :long 的最小值
  15. ULONG_MAX :unsigned long 的最大值
  16. LLONG_MAX :long long 的最大值
  17. LLONG_MIN :long long 的最小值
  18. ULLONG_MAX :unsigned long long 的最大值

2. 初始化
初始化将赋值和声明合并在一起,例如

int n_int = INT_MAX;
也可以使用字面值常量来初始化。可以将变量初始化为另一个变量,但条件是后者已经定义过;甚至可以使用表达式来初始化变量,条件是当程序执行到该声明时,表达式中所有的值都是已知的。例如:

int uncles = 5;
int aunts = uncles;
int chairs = aunts + uncles + 4;
前面的初始化语法来自 C 语言, C++ 还有另一种 C 语言没有初始化语法:

int owls = 101; // 传统的 C 初始化方法
int wrens(432); // C++ 语法,变量赋值为 432
3. C++11 初始化方式
还有另一种初始化方式,这种方式用于数组和结构,但在 C++98 中,也可以用于单值变量:

int hamburgers = {24}; //设置变量的值为24
将大括号初始化器用于单值变量的情形还不多,但 C++11 标准使得这种情形更多了。首先,采用这种方式时,可以使用等号(=),也可以不实用:

int emus{7};
int emus = {7};
上述都可以将变量值设置为7
其次,大括号内可以不包含任何东西。在这种情况下,变量将被初始化为零(0):

int rocs = {};
int rocs{};
第三,这有助于更好的防范类型转换错误。







  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在计算机编程语言中,shortintlong是表示整数类型的关键字。它们的区别在于它们所能表示的范围大小不同。 shortshort int的缩写,表示短整型。一般情况下,short占用2个字节(16位),它的取值范围较小,大约是-32,768到32,767。 int是整型的缩写,表示整数类型。在不同的编译器中,int的大小可以是2个字节(16位)或4个字节(32位),这取决于编译器和操作系统的要求。它的取值范围较大,大约是-2,147,483,648到2,147,483,647。 long表示长整型。在不同的编译器中,long的大小可以是4个字节(32位)或8个字节(64位)。它的取值范围比int更大,大约是-9,223,372,036,854,775,808到9,223,372,036,854,775,807。 需要注意的是,在编程过程中,long类型的值需要在数字后面加上"L",以区分它们和int类型的值。例如,long num = 100000000L。 需要了解的是,并没有规定long一定要比int长,也没有规定short要比int短。根据标准规定,长整型至少和整型一样长,整型至少和短整型一样长。具体的实现方式和长度由编译器厂商决定。因此,具体的shortintlong的大小取决于所使用的编译器和操作系统。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [关于intshort intlong intlong long 的区别](https://blog.csdn.net/u012223913/article/details/51181761)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [关于 shortint ,long,和float,double 理解](https://blog.csdn.net/chujingh975868/article/details/100972058)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值