(1)整数类型:byte、short、int、long
(2)小数类型:float、double
(3)字符类型:char
(4)布尔类型:boolean
先附上一个比较直观的表,长度表示字节:
byte: 字节 bit: 位
- 短整型 short:
所占内存大小:2byte=16bit;
所能表示范围:-3276832767;(即 - 2^152^15-1)
- 整型 int:
所占内存大小:4byte=32bit;
所能表示范围:-21474836482147483647;(**即 - 2^312^31-1**)
unsigned:
所占内存大小:4byte=32bit;
所能表示范围:04294967295;(**即 02^32-1**)
- 长整型 long:
所占内存大小:4byte=32bit;
所能表示范围:-21474836482147483647;(即 - 2^312^31-1)
unsigned long:
所占内存大小:4byte=32bit;
所能表示范围:04294967295;(即 02^32-1)
- long long:
所占内存大小:8byte=64bit;
所能表示范围:-92233720368547758089223372036854775807;(即 - 2^632^63-1)
unsigned long:
所占内存大小:8byte=64bit;
所能表示范围:018446744073709551615;(即 02^64-1)
注:上面所说的全部是有符号型的,short,int,long, long long 都默认为有符号型,其 中 long 和 int 都占 4 个字节的空间大小,他们有什么区别呢?
16 位操作系统:long:4 字节,int:2 字节
32 位操作系统:long:4 字节,int:4 字节
64 位操作系统:long:8 字节,int:4 字节
int 型在不同位数操作系统中所占用的字节数不同,如果想编写可移植性好的程序,早年流行 16 位和 32 位操作系统时最好用 long 修饰 int 型,现在流行 32 位和 64 位操作系统,用 int 就挺多了。当然这些都看你怎么去理解它了,毕竟它 们在不同操作系统所占字节数不固定,所以各自都有其适用之处,不可定论其好坏。
下面是对它 们的有科学依据的规定:
C 语言规定:无论什么平台都要保证 long 型占用字节数不小于 int 型, int 型不小于 short 型。
- 字符型 char:
所占内存大小:1byte=8bit;
所能表示范围:不确定!!!!;
unsigned char:
所占内存大小:1byte=8bit;
所能表示范围:0255;(02^8-1)
singned char:
所占内存大小:1byte=8bit;
所能表示范围:-128127;(-2^72^7-1)
char 的默认类型不确定有可能是 unsigned,也有可能是 signed,主要更具编译器而定,可以自己测试一下编译器的默认 char 的符号类型。
- 布尔类型 bool:
所占内存大小:1byte=8bit;
所能表示的范围:只能取两个值 false 或者 true;所以最小值就是:0, 最大值:1.
- 单精度 float:
所占内存大小:4byte=32bit;
所能表示的范围:(1.17549e-038)~(3.40282e+038);
注意:浮点数在 内存中都是按科学计数法来存储的,浮点数的精度是由尾数的位数决定的,大家记住即可不必深究;
聊一聊 IEEE754 标准(里面涉及浮点数精度丢失问题)_浮点数对阶移位的精度损失_你代码写的好像不对的博客 - CSDN 博客
java float double 精度为什么会丢失?浅谈 java 的浮点数精度问题_abing37 的博客 - CSDN 博客
java 面试官:Double 为什么会丢失精度?解决方法?答出给 1 万月薪 - 腾讯云开发者社区 - 腾讯云
- 双精度 double:
所占内存大小:8byte=64bit;
所能表示的范围:(2.22507e-308)~(1.79769e+308);
注:如何区分和使用这两个浮点类型呢,首先 float 和 double 的精度不同, float 保留到小数点后面 7 位,而 double 保留到小数点后面 16 位,float 能保证 6 位有效数字,而 double 能保证 15 位有效数字,如果在不追求精度的的情况下当然用 float 比较好,节省内存,如果需要很高的精度的情况下,最好还是用 double,平时我们定义浮点型变量一般都用 double,毕竟精度高,一般精度 的损失是不能忽略的。
- 字符串 string:由于 string 在 c++ 中属于类类型,不是基本数据类型,类不能计算其在内 存中所占大小,非要用 sizeof(string) 来算的话,一般算出来的结果是 sizeof(string)=4byte,如果 string 字符串内容很多,很明显就不是其 真实大小,string 类里面有计算其字节大小的函数如:size(),length()。