每次在用的时候对数据类型范围很模糊,到底会不会溢出,该不该用long long之类的,这次找了相关资料给总结下
- char 1 -128到126
- unsigned char 1 0到255
- short 2 -32,768到32,767
- unsigned short 2 0到65,535
- long 4 -2,147,483,648到2,147,483,648
- unsigned long 4 0到4,294,967,295
- int 4 同long
- unsigned int 4 同unsigned long
- float 4 1.2E-38到3.4E381
- double 8 2.2E-308到1.8E3082
- bool 1 true或false
- long long [int] 64 0 ~ 2^64-1 =18,446,744,073,709,551,616 所占20位左右
从上表可以看出,int与long相同。那么,为什么C++还要区分这两种数据类型呢?实际上这是个遗留问题。在16位编程环境中,int要求2个字节而long要求4个字节。而在32位编程环境中,这两种数据都用4个字节存放
还有浮点型的强制转换int舍弃小数部分,如果保留有效位的话可以四舍五入
long long 的数据已经达到了20位的整数,所以大部分情况下可以处理大数,但是还要顾及时间复杂度,float和double更大了
long long在某些oj的g++编译器并不支持,提示wa,但是gcc却可以通过