c语言(一)数据类型

一、分类
1.
A 标量类型:
A1 算术类型
a1基本类型
1 整型:标准整数类型、扩充的整数类型
2 实型/浮点型:实数浮点类型、复数浮点类型
3 字符型
a2枚举类型
A2 指针类型
B 聚合类型:
B1 数组类型
B2 结构类型
C 联合类型
D 函数类型

2.描述对象的数据类型可分为:
对象类型:描述包括对象存储空间大小信息
不完整类型:描述没有包括对象存储空间大小信息

3.(小甲鱼)
A 基本类型:
a 整型
b 实型(浮点型)
c 字符型
d 枚举类型
B 构造类型:
a 数组类型
b 结构体类型
c 共用体类型
C 指针类型
D 空类型

二、基本数据类型
【不可以再分解为其他类型,即是自我说明的】
(一)根据其取值,可分为:
1.常量:值不发生改变的量,可以不经过说明而直接引用。
(1)符号常量:用标识符代表的一个常量
符号常量在使用之前必须先定义,一般形式为:
#define 标识符 常量
其中#define也是一条预处理命令(预处理命令都以#开头),称为宏定义命令,功能是把该标识符定义为其后的常量值,之后程序所有出现标识符的地方均代以其常量值。
PS. 习惯上符号常量的标识符用大写字母,变量的标识符用小写字母。

note.  注意:
<1>使用符号常量可以做到“一改全改”。
<2>符号常量的值在其作用域内不能改变,也不能再赋值。

2.变量:其值可变,必须先定义后使用。
一个变量应该有一个名字,在内存中占据一定的存储单元。
变量定义一般放在变量使用之前,一般放在函数体的开头部分。
变量名!=变量值
在这里插入图片描述
(二)整型
1.整型常量(整常数)
(1)十进制整常数:没有前缀,数码为0~9。【在程序中是根据前缀来区分各种进制数的】
(2)八进制整常数:必须以0开头,即0作为八进制的前缀。数码取值为0~7。八进制数通常是无符号数。
(3)十六进制整常数:前缀为0X或0x.数码值为09,AF或a~f。
(4)整型常数的后缀:

note. 在16字长的机器上,基本整型的长度也为16位,因此表示的数的范围也是有限定的。
十进制无符号整常数的范围:0~65535(2^16)
有符号数:-32768~+32767
八进制无符号整常数的范围:0~0177777
十六进制无符号数的范围:0X0~0XFFFF或0x0~0xFFFF。
如果使用的数超过了上述范围,就必须用长整型来表示【长整型数的后缀:L或l。

2.整型变量
(1)在内存中的存放
(见上方“变量”部分中的图,注意3在内存中是以二进制的形式存储的)
note.
<1>一个字节BYTE=8位bit
<2>数值是以补码表示的:正数的补码和原码相同;负数的补码是将该数的绝对值的二进制形式按位取反后再加1.
(2)分类
<1>基本型:int ,在内存中占4/2个字节。【占多少字节与系统和编译器有关】
<2>短整量:short int或short。所占字节和取值范围与基本型相同。
<3>长整型:long int 或long,在内存中占4个字节。
<4>无符号型:类型说明符为unsigned。
(3)整型变量的定义
变量定义的一般形式为:
类型说明符 变量名标识符,变量名标识符,……;

ex.
int a,b,b;
long x,y;
unsigned p,q;

note. 变量必须先定义才能实现。
 ex.整型变量的定义与使用
 #include<stdio.h>
 void main()
 {
    int a,b,c,d;
    unsigned u;
    a=12;b=-24;u=10;
    c=a+u;d=b+u;
    printf("a+u%d,b+u%d\n",c,d);
  }

(4)整型数据的溢出

ex.整型数据的溢出
#include<stdio.h>
void main()
{
    short int a,b;
    a=32767;
    b=a+1;
    printf("%d,%d\n",a,b);
}

note.
<1>short int只占两个字节,也就是2^16=32768(包括0,也就是最大是32767)
<2>最后输出的是-32768.
<3>长整型变量与基本整型变量之间运算,结果为长整型,但若结果提前被定义为基本整型,结果就为基本整型。
【不同类型的量可以参与运算并相互赋值,其中的类型转换是由编译器自动完成的】

(三)实型
1.实型常量的表示方法
实型也称为浮点型。实行常量也成为实数或者浮点数。C语言中,实数只采用十进制,它有十进制小数形式和指数形式两种形式。
(1)十进制数形式:由数码0~9和小数点组成。如:
0.0,25.0,300.,0.13,-23.140
等。注意必须要有小数点。
【标准C中允许浮点数使用后缀,后缀为"f"或"F",即表示该数为浮点数,如356F和356.是等价的】
(2)指数形式:由十进制数、加阶码标志"e"或"E"以及阶码(只能为整数,可带符号)组成。
一般形式为:
a E n (a为十进制数,n为十进制整数)
如:2.1E5 (等于2.1*10^5)

2.实型变量
(1)在内存中的存放形式
实型数据一般占4个字节(32位)内存空间,按指数形式存储。
ex.实数3.14159
符号[1] 小数部分[7] 指数部分[24]
+ . 314159 1

<1>小数部分占的位(bit)数越多,数的有效数字越多,精度越高。
<2>指数部分占的位数越多,能表示的数值范围越大。

(2)分类
分为单精度(float型)、双精度(double型)和长双精度(long double型)
在Turbo C中
单精度型占4个字节(32位)内存空间,其数值范围位3.4E-38~3.4E+38,只能提供七位有效数字。
双精度型占8个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。

3.实型数据的舍入误差
由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的。

ex.实型数据的舍入误差
#include<stdio.h>
void main()
{    
    float a,b;
    a=123456.789e5;
    b=a+20;
    printf("%f\n",a)
    printf("%f\n",b)
}
//只有前七个数是正确的,后面则是随机数(发生了舍入误差)

三、变量赋初值
初始化:在作变量定义的同时给变量赋以初值的方法。
在变量定义中赋初值的一般形式为:
类型说明符 变量1=值1,变量2=值2……;

例如:
int a,b=1;
float x=2.3,y=3f,z=0.75;
char ch1='K',ch2='P';

各类数值型数据之间的 混合运算。
变量的数据类型是可以转换的,转换的方式有:
1.自动转换
发生在不同数据类型的量混合运算时,由编译系统自动完成。遵循规则:
(1)若参与运算量的类型不同,则先转换成同一类型,再进行运算。
(2)转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转换成long型后再进行运算。
(3)所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再做运算。
(4)char型和short型参与运算时,必须先转换成int型。
(5)再赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换成左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度。【丢失的部分按四舍五入向前舍入】

类型自动转换的规则:
在这里插入图片描述

ex.
#include<stdio.h>
void main()
{    
    float PI=3.14159;
    int s,r=5;
    s=r*r*PI;
    printf("s=%d\n",s);
}
note. 本例中PI为实型,s,r为整型。在执行s=r*r*PI 语句时,r和PI 都转换成double型计算,结果也为double型。但由于s为整型,故赋值结果仍为整型,舍去了小数部分。

四、强制类型转换
通过类型转换运算来实现,一般形式为:
(类型说明符) (表达式);
其功能时把表达式的运算结果强制转换成类型说明符所表示的类型。

例如:
(float) a;
(int) (x+y);
NOTE:
1)类型说明符和表达式都必须加括号(单个变量可以不用),如若写成
(int) x+y,表示先把x转换成int再与y相加。
2)强制转换和自动转换都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而没有改变数据说明时对该变量定义的类型。
ex.
#include<stdio.h>
void main()
{
float f=5.75;
printf("(int)f=%d, f=%f\n",(int) f,f);
}
/*最后输出:
(int)f=5, f=5.75*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值