C语言的数据类型

时间:2023-03-09 02:38:48
C语言的数据类型

复习之余,做点笔记<C语言之数据类型>

一、整数数据类型

(1)整数数据类型

整数类型

char 字符型变量   1字节(8Bit)

short 短整型      2字节(16Bit)

int   整形变量    取决于编译器

long 长整形变量   取决于编译器

对int的理解:在计算机中有CPU和内存,在CPU中有寄存器,CPU与内存之间通过总线进行数据传输,所谓的CPU位数(例如32位、64位)就是指一块寄存器的大小,寄存器多大,总线就可以处理多大带宽的数据,例如32位机器它的寄存器大小就是32位,它一次处理的数据就是32位,则int的大小就是32Bit也就是4字节,总而言之int的大小就是取决于寄存器大小

具体int的长度可以采用函数sizeof(int)来查看。

(2)数据存储形式

数据在计算机中是以二进制形式参与运算的,数据有正有负,这就要求设计一种数据保存形式,方法是补码形式

例如:

以char类型举例,八位表示,则0可以用0000 0000表示,1则用0000 0001表示,那么由于-1=0-1则-1可以用0000 0000 – 0000 0001表示,结果为1111 1111。高位进位直接消去。这就是补码。

所以char型变量表示的范围为-128~127,其中0111 1111为127,1111 1111为128。

上述为有符号形式的变量,C语言还提供了无符号形式变量,可以在变量形式前面加上unsigned无符号形式

无符号变量的设计初衷是为了能够进行二进制移位操作(因为有符号形式时,最高位具有符号意味)。

(3)数据输入输出形式

C语言的数据采用printf函数来进行数据打印,用法如下所示

printf(“数据为%d”,a);//入口参数有多个,第一个含义为数据格式,也就是打印的格式,例子的内容是打印“数据为%d”其中%d为特殊格式,代表一个整形数字,至于数据的内容,则在后面的参数给出,例中是a,加入a = 10则最终打印在屏幕上为“数据为10”

对于%f、%d其他的数据格式后续介绍。

(4)数据选择

我们定义一个数据选择什么类型呢,无特殊要求还是选择int现在的计算机操作都是32位、64位的一次处理数据位数就是32位,即便你声明char型也不会节省空间与时间,相反也许会增加使用时间。

小结:本节主要告诉大家整形数据类型有哪几种,他们在计算机中的存在形式是怎样的。要记住int的表示形式,正因为这样,所以C语言的可移植性比较差,而JAVA语言对于变量类型要求没有这莫严格,int的数据长度不变化,所以人们常用JAVA编写Android(得益于其可移植性)。而C语言的unsigned使得它可以很方便的移位操作,所以他在嵌入式单片机中应用广泛。

二、浮点数据类型

浮点类型就是生活中习以为常的带小数点的数,但是在计算机内部,浮点数的处理是很特别的。整数是以二进制的形式存在于计算机内部的,而浮点数不是。浮点数是编码的数字,因此两个浮点数不能在计算机内部直接以二进制的方式进行计算,通常需要专门的硬件支持。

浮点数的计算机内部表达形式造成了浮点数的很多有意思的现象。

(1)浮点型数据类型

float

32位

±(1.2E-38~3.4E+38)

double

64位

±(2.2E-308~1.79E+308)

注意:表中可以看出浮点型数据表示的数据都是只能在零附近,但是不能表示0,计算机中编码后的浮点型数据是固定的,我们给出一个数据,他会根据这个数据距离哪个数据近,就编码成那一个数据,例如我们命令float f=0.002可能计算机中浮点数据没有这一个数据,而只有数据0.002001和0.002005那么他会自动把我们数据变为0.002001。

(2)浮点型数字的判断

对于浮点型数字,因为数字精度不同,所以a和b可能计算结果都是0.5,但是两个浮点型数字的二进制形式可能不同。

所以判断数字是否相等判断下面的等式

fabs(f1-f2) < 1e-12

浮点型数字的计算本身是由内部CPU硬件进行计算的。

三、逻辑数据类型

(1)逻辑数据类型

数据类型进行逻辑判断时只有真和假在代码中就是0与1。在计算中,CPU认为0是假,非零全是真。本身C语言的整形变量的0代表假,非零的代表真,逻辑值为1。

bool型是逻辑型变量,其包含在stdbool.h中。包含了此头文件,就可以使用bool。但是其用处不大,因为它本身还是整型变量,只不过有两个true 、false值如下所示。

bool a =true;//声明逻辑型变量a = 1

printf(“%d”,a);//输出结果为1

(2)逻辑运算

运算符号

描述

实例

解释

!a

如果a为0则结果为1如果a为非零则结果为1

&&

逻辑与

a&&b

当两数均为1时结果为1其余情况均为0

||

逻辑或

a||b

当两数均为0时结果为0其余情况均为1

&

按位与

a&b

按位与就是把两个变量展开成二进制,对每一位进行与运算

|

按位或

a|b

注意

(1)当按位与运算时,加入a的值已经为假时,结果已经确认为假即0就不需要进行b例如(a=0)&&(b=2)结果为0并且a被赋值为0,但是b没有被赋值为2。同样按位与运算时,假如a的值已经为真时,结果已经确定为真,即1则就不需要进行运算b。

(2)单目运算符的优先级高于双目运算符,例如!age<20表示age的非,然后再运算是否小于20。