人生就是一场马拉松,不用特别努力,但是要一直努力
计算机只能读懂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;
}
疑问
- 如果说long的最大值跟int一样,那要long这个数据类型干嘛?
- 什么叫至少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。
符号常量 | 表示 |
SCHAR_MAX | signed char的最大值 |
SHRT_MAX | short的最大值 |
INT_MAX | int的最大值 |
LONG_MAX | long的最大值 |
表格只列了一部分,有兴趣的小伙伴可以自己再去找找。以上只是我的一些想法记录,如果有错误或者更好更专业的解释,也希望你们能在评论区告诉我。