[C++学习日志02]

人生就是一场马拉松,不用特别努力,但是要一直努力

计算机只能读懂0和1,计算机通过0和1来解读世界,就像物理和数学解读世界那样,不同的语言不同的解读方式,如何让计算机理解这个世界,就要将我们现实生活中的数据通过合理的方式组织,让计算机明白,数据分析、数据挖掘、数据结构........

SHORT INT LONG

  • short至少16位
  • int至少与short一样长
  • long至少32位,且至少与int一样长 

测试 

#include <iostream>
#include <climits>

using namespace std;

int main()
{
    int n_int=INT_MAX;
    short n_short=SHRT_MAX;
    long n_long=LONG_MAX;

    //1.测试这几个数据类型所占的空间大小
    cout<<sizeof(int)<<endl;
    cout<<sizeof(short)<<endl;
    cout<<sizeof(long)<<endl;
    cout<<sizeof(long long)<<endl;
    cout<<"---------------"<<endl;

    //2.输出这几个类型的最大值
    cout<<n_int<<endl;
    cout<<n_short<<endl;
    cout<<n_long<<endl;
    cout<<"----------------"<<endl;

    //3.测试一下long类型会不会溢出
    long n =2147483649;
    cout<<n<<endl;

    return 0;
}

 

疑问 

  1. 如果说long的最大值跟int一样,那要long这个数据类型干嘛?
  2. 什么叫至少32位,至少16位,难道还能变多?

探索 

        首先要明白,世界上有很多计算机型号,也有很多标准, 如果把这个标准定死,short就是16位,int就是32位是没有办法满足所有计算机设计的要求的(虽然我不知道到底是怎么没办法满足,既然前辈们已经研究过了,我暂时不细究,先放一边,说不定以后学着学着就知道了)就像是不同的操作系统、不同的标准他的要求不一样,感觉涉及到更多底层的实现和知识,总之,为了有更好的迁移性,C++规定了这样的标准。

        其次,还有一个概念,自然长度(natural size),就是指计算机处理起来效率最高的长度。通常,int被设置为对目标计算机而言最为“自然”的长度。

        现在,来回答上面的问题。

        1.根据前面,有些系统的long可以设置更多的存储空间,如何查看自己的系统的限制呢?(下文会讲)所以知道变量可能表示的整数值大语16位整数的最大可能值,则使用long,即使系统上int为32位,这样当系统移植到16位的系统中时,程序就不会突然无法正常工作,提高了可移植性

        再比如,short和int,short可以节省更多的内存,如果节省内存很重要,则应使用short而不是int,即使它们的长度是一样的。DOS PC系统的int是16位的,Window XP的int是32位的,如果把程序从DOS移植到XP,则用于存储int数组的内存量将加倍,但short数组不受影响。

        2.我犯了一个错误就是只是从我个人使用者这个角度去看待这个问题,但是C++的设计者要考虑的东西更多,不同的软件、不同的硬件,这个“至少”应该是一个更大的范围来说的,而不仅仅只是只一台电脑,那么也就是不能变化的,只不过是系统之间的差异。

补充

        可以使用一个头文件来查看自己系统的限制,#include <climits>还有sizeof。

climits中的符号常量
符号常量表示
SCHAR_MAXsigned char的最大值
SHRT_MAXshort的最大值

INT_MAX

int的最大值

LONG_MAX

long的最大值

        表格只列了一部分,有兴趣的小伙伴可以自己再去找找。以上只是我的一些想法记录,如果有错误或者更好更专业的解释,也希望你们能在评论区告诉我。

  • 43
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值