一、数据类型分类与解析
1.分类
数据类型大体分为内置类型和自定义类型,本文以内置类型为主,自定义类型常见的是数组,现阶段了解就行了,而内置类型主要分为字符型、整型、浮点型、布尔型。
2.各数据类型的范围
字符型char的范围: 是需要稍微知道记住的,一个char变量所存内存大小是一个字节(八位),范围是在-27~27-1,就是-128 ~127
整形的范围: 整形分为短整型short (int)、整型int、长整型long (int)、长长整型long long (int)
整型的最大最小值大致可以推,以有多少字节然后得到多少位二进制,再以二进制计算数值,大致上不要死记硬背,俗话说吃多少饭用多大碗,在编程上也是一样,有多大的数值就用多大的类型
短整型变量所存内存大小是两个字节(十六位),范围是在-215~215-1
整型变量所存内存大小是四个字节(三十二位),范围是在-231~231-1
长整型变量所存内存大小是四个字节(三十二位),范围是在-231~231-1
长长整型变量所存内存大小是八个字节(六十四位),范围是在-263~263-1
最小最大值如图所示:
使用库函数limits.h即可查字符型与整型的最大最小值
浮点型的范围: 浮点型又分为单精度浮点型与双精度浮点型,浮点型就是说小数点可以浮动,本质上是一个小数,因为在正常情况下小数并不需要太大内存,所以范围就不用有太多了解,但是要知道的是单精度浮点型变量是占四个字节,双精度浮点型占八个字节
所谓单精度双精度就是小数点后几位的精确度,计算机是以二进制数来存放内容的,一些小数是无法很准确的记录小数数值,这时候要精确到小数点后几位来近似代表这个值,而单精度就是小数点后七位有效,双精度就是可以精确显示小数点后十六位有效,当然,这都是十进制下小数点后几位有效
正常情况下,无论是double型还是float型,没要求的情况下只会打印后六位,但精度是确确实实存在的,可能只有计算的时候才能体现出精度的重要性与准确性
布尔型的范围: 布尔类型变量在C语言中只占一个字节,只会存0与1,这时要说的就是非0就是真,真就是1,所以只要给个整型的数值进去,到最后输出的也是1
二、内置类型各种细节
1. 字符型
字符型:代表一个字符的类型,规则是,以数字代表字符,所以字符型在地址所存的还是一个数字,以ASCII码数字对应字符,可以直接给一个数字,也可以直接给一个字符,如下所示
以数字65代表大写字母A:
char c = 65;
直接给字母小写a:
char c = 'a';
效果如图
字符型需要大概记住字符‘0’、‘A’、‘a’所存分别数值是48、65、97,大写字符‘A’加32就是小写字符‘a’的值,大写英文字符加32就是小写英文字符的值,数字0~10是连贯的,字母大写是连贯的,小写也是连贯的,当然,需要的时候查ASCII码表就好了
注意:打印字符时所用的占位符是%c,代表是单个字符输出,当占位符为%d打印时,变量却是字符型时,所打印的就是对应的ASCII码值
2. 整型
整型: 整型变量是最常用的变量,循环结构和分支结构通常以整数为判断条件判断
而整型在使用时主要的是注意范围,也就是防止向下和向上溢出
向下与向上溢出,规则是使用他们二进制进行相加或相减,数值太大时进行运算再存回一样大的空间时就会溢出,最后的值就不是想要的正确的值
注意:整型变量打印是用占位符%d打印,短整型打印用%hd,长整型打印用%ld,长长整型打印用%lld,大的占位符通常可以打印小的变量,但小的占位符打印大的数据可能会丢失数据
3. 浮点型
浮点型: 使用时注意使用float定义变量时初始化需要在数值后面加个f
float num = 0.256f;
如果没有字符f,会出现警告说从double转换float时截断,计算机自认为一个小数是double类型
但如果定义的是double类型就不用有什么问题
注意:打印float变量时占位符为%f,打印double变量时占位符为%lf
三、有符号signed与无符号unsigned
计算机储存数值时通常是最高位为符号位,最高位0代表正数,1代表负数
而且计算机存储负数时是以补码来存的,运算也是补码相加减,但并不干扰我们使用
有符号就代表着有正负号,而无符号就代表只有正数的那一边
有符号是常规数值范围,而无符号最小值就为0,最大值为常规范围最大值的两倍加1
如图所示
定义无符号字符变量的好处是,当我不需要负数时,我的正数那部分也扩大了一倍,这样可以省存储空间,就是不需要更大的类型来装这个数值
四、番外,强转!
强制转换就是把一个数据类型强行转换成另外的类,可以把较小的数据类型转换成较大的数据类型,也可以用较大的类型转换成较小的类型
这里的较小较大的意思是字节的大小!!!
格式如下:
type mane = number;
type conversion = (type)mane;
当小的类型转换成大的类型时,并不会有什么数据丢失
但当大的类型转换成小的类型时,数据就发生截断,以二进制表示的数据就会从高位开始截断
比如说一个八个字节的数据long long int 强制转换成四位字节的int时,高四位字节的数据就会丢失
如果截断的long long int 最高位为1时,那么int会是一个负数
如下所示:
注意:浮点数强转转换成整数类型时,小数部分就会截断,只会保留了整数部分
如下所示:
可以看出十进制整型打印还能打印出来,整型对于浮点数打印如果可以打印就会显示3.000000,但看到警告,而且无法打印,所以也看不到后面情况,但是整型变量百分百是没有小数部分的了
俗话说强扭的瓜不甜,数据不是很依赖强制转换,适当使用
五、结语
这文章应该是逻辑不清晰了,存在一定的问题,个人见解的数据类型,可以适当参考,如有问题,请包涵并指出来
怪我逻辑差