1.变量与常量
常量:这些数据类型在使用前就设定好了,在整个程序运行中没有变化。
变量:这些数据类型在程序运行期间可能会改变或被赋值。
2.数据类型两大类:整数类型、浮点数类型
常量有其本身的性质:或是整数,或是小数、字符。变量还未被赋值时也不是什么都可以装,因为变量在使用之前是要被声明的,在这里就会让编译器知道这个变量在未来会被赋予怎样的值。
像这种储存的数值有他们的名称:整型、浮点型、字符型。
2.1浮点数
计算机储存的都是数字0或1,没有其他的表示,那么计算机是怎样储存浮点数的呢?
计算机把浮点数分成小数部分和指数部分来表示,而且分开储存这两部分。所以7和7.0的储存方式就不同。具体方式看第6条。
2.2int整数类型
普通情况下,int型是有符号整型,即正整数、负整数、0。其取值范围依计算机系统而异,一般而言,储存一个int型要占用一个机器字长:我们平时称的32位、64位计算机等。
我们都知道用printf()打印int型数字时,要用%d,其实%d只是打印十进制数字才用的,当需要打印八进制或者十六进制时,要分别使用%o与%x。另外,要显示八进制前缀0、十六进制前缀0x,要在转换说明(%d等)中加入'#'。
整型与浮点型的区别:
1.在C语言中,整数就是没有小数部分的数,浮点数就是有小数部分的数。这个定义看似简单,却常常引起一些错误,比如:7.0,我们在数学中或许会直接将它的小数部分省去,从而是她变成一个整数。但是计算机却不会这种省略,它会简简单单的认为它是有小数部分的,所以7.0在C语言中,被称为浮点数。
2.浮点数可以表示的范围更大
3.对于一些算数运算(例如很大的数相加减),浮点数损失的精度更多。?
(1)这是因为任何区间内存在无穷多个实数,浮点数只是一个近似值。
(2)计算机以二进制形式储存数字,但小数化成二进制时可能会很长,造成位数不构截断部分位数,所以数字本身就造成了误差。
4.浮点运算比整数运算慢,即使现在CPU含有浮点处理器,这个速度差也只是减小了而已。
2.3整数类型分支
int类型的分支short int、long int、long long int、unsigned int、unsigned long int等。
其中,short、int、long、long long等所占的存储空间在同一字长的约束下越来越大。因为他们所占的存储空间都与机器字长有关,(以当下64位计算机而言)long long 一般 64 位,long 是 32 位,short 是 16 位,而 int 或者 16 位,或者 32 位。
所以根据上点,为了优化系统内存,尽量使用占用单位较小的数据类型。
我们在使用数字时,要想把一个较小的数作为long型对待,就要在值的末尾加上l(小写L)或L(虽然不知道谁闲的没事干要这样对待一个数字)。
打印他们时,自然也不能再用%d了,打印unsigned int型时用%u,long用%ld,类似的,long long用%lld,short型用%hd,%lu表示unsigned long··· ···
在不同的类型之间转换时,要注意溢出,将发生数值的改变(具体改变见后续说明)。
3.char类型:最小的整数类型
char类型用于储存字符,但从技术层面来看是整数类型,因为char实际上存储的是整数而不是字符。编译器一旦发现用''括起来的内容便自行将其转换成相应的代码值。
?在打印字符时,会发现有些ASCII码所表示的东西你自己表示不出来,例如一些代表行为的字符如换行之类,这里有三种方法表示(输出)这些字符。
(1)利用ASCII码
(2)利用转义字符:/的形式。是使用特殊的符号序列表示一些特殊字符。如下图:
其中的当前位置就是光标所在的位置。中下方的一些行数中说代表了某些字符,为什么不在printf时直接放到""中呢?因为这些字符用于定义字符常量,是printf的一部分,直接使用会造成混乱。
4.bool类型:另类的整数类型
用于表示布尔值,即逻辑值:true和false。C语言用值1表示true,用0表示false,所以bool实际上也是一种整数类型,但原则上只占有1位存储空间。
5.可移植类型:stdin.h和inttypes.h
啥玩意看不懂啊呜呜呜呜呜呜想哭··· ···
第一个好像是int和计算机位数组合的长成int32_t作为int的别名。然后用这个头文件会把int或long替换成与系统相匹配的类型。别名精确宽度整数类型。
不支持的时候可以用第二个头文件。这一类类型名的类型一定是至少有指定宽度的最小整数类型。这种类型的集合被称为最小宽度类型。
··· ···真的不太懂,进行下一项把。看到这的抱歉了呜呜呜
6.浮点类型
C语言中浮点类型有float、double、long double类型。
这里我们就不得不提浮点数的指数记法,比如5.23e+8,表示5.23*10^8,e后面是10的指数。其中,正号可以省略,可以没有小数点或指数部分,但不能同时省略两者;可以省略小数部分或整数部分,但不能同时省略两者。数字和e(可以是E)之间不要有空格哦。
float类型必须至少能表示6位有效数字(也就是说,可以有七位小数啦但是不能精确的表示了哦),且取值范围至少是10^-37~10^37。通常系统储存一个浮点数要占用32位,8位用于表示指数的值和符号,剩下的24位用于表示非指数部分。
另一种浮点类型是double(双精度),与float的最小取值范围相同,但至少能表示10位有效数字。一般情况下,double占用64位而不是32位。一些系统将多出来的32位全部用于表示非指数部分,这不仅增加了有效数字的位数,还减小了舍入误差。
通常情况下,计算机内部存储小数都是以double存储的,所以假定a为float时,进行a=4.0*2.0,那么乘积将被截断成float的宽度。这样做计算精度高,但会减慢运行速度。?
以上是特别常见的数据类型,不常见的请详见下一份博客哦~
注意:把一个变量初始化成不同类型的变量时,编译器会把值转换成与变量匹配的类型(直接截断),导致部分数据丢失。