(6)关于整型short、int、long和long long

书籍:《C++ Primer Plus 第6版》第三章:
C++对整型short、int、long和long long的长度规则定义如下:
- short 至少16位;
- int 至少和short一样长;
- long 至少32位,且至少和int一样长;
- long long 至少64位,且至少和long一样长。
可能这个地方比较难以理解,为什么C++的规则那么奇怪,什么叫至少呢。
我查了百度上一些前辈的资料,原来是这样的,因为C++是一门跨平台的语言,对于不同的系统来说,整型short、int、long和long long的长度是不一样的,这个至少给人理解上的这个类型的长度可变,是针对不同系统来说是可变的,针对一个系统,长度是固定的,假如short有16位,那么int最少也要有16位。

// limits.cpp -- some integer limits
#include <iostream>
#include <climits>              // use limits.h for older systems
int main()
{
    using namespace std;
    int n_int = INT_MAX;        // 给n_int赋值为int类型的最大值
    short n_short = SHRT_MAX;   // 给n_short赋值为short类型的最大值
    long n_long = LONG_MAX;  //给n_long赋值为long类型的最大值
    long long n_llong = LLONG_MAX;//给n_llong赋值为long long类型的最大值
    /*以上INT_MAX、SHRT_MAX、LONG_MAX、LLONG_MAX是在头文件climits中定义的符号常量。
    分别代表int的最大值,short的最大值,long的最大值,long long的最大值。
    本文附表中,全对climits文件中定义的符号常量进行总结*/

    // 下面显示内存的字节数
    cout << "int is " << sizeof (int) << " bytes." << endl;//sizeof运算符,对类型名使用时,应加括号
    cout << "short is " << sizeof n_short << " bytes." << endl;//sizeof运算符,对变量名使用时,可以省略括号
    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;
    cout << "long: " << n_long << endl;
    cout << "long long: " << n_llong << endl << endl;

    cout << "Minimum int value = " << INT_MIN << endl;
    cout << "Bits per byte = " << CHAR_BIT << endl;
    // cin.get();
    return 0;
}

sizeof 运算符,可以算出int为4bytes,1bytes=8bit,int就是32位。

附表:climits 中的符号常量

符号常量表示
CHAR_BITchar的位数
CHAR_MAXchar的最大值
CHAR_MINchar的最小值
SCHAR_MAXsigned char的最大值
SCHAR_MINsigned char的最小值
UCHAR_MAXunsigned char的最大值
SHRT_MAXshort的最大值
SHRT_MINshort的最小值
USHRT_MAXunsigned short的最大值
INT_MAXint的最大值
INT_MINint的最小值
UINT_MAXunsigned int的最大值
LONG_MAXlong的最大值
LONG_MINlong的最小值
ULONG_MAXunsigned long的最大值
LLONG_MAXlong long的最大值
LLONG_MINlong long的最小值
ULLONG_MAXunsigned long long的最大值

关于整型的选择:
1. int为计算机处理效率最高的长度。如果没有非常说服力的理由来选择其他类型,则应使用int。
2. 如果变量的值不可能为负数,则可以使用无符号类型。
3. 如果知道变量可能表示的整数值大于16位,则应使用long,即使系统上的int类型为32位,也应该这样做,这样程序在移值到16位的系统上时,就不会突然无法正常工作。
4. 如果要存储的值超过20亿,可以使用long long。
5. 如果short比int小,则可以使用short来节省内存,通常,仅当有大型整型数组时,才有必要使用short。如果节省内存很重要,则应使用short而不是使用int,即使它们的长度是一样的。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尛牧妞妞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值