C语言数据类型_02
C语言数据类型:
1、基本数据类型:基本数据类型最主要的特点是,其值不可以再分解为其他类型。也就是说,基本数据类型是自我说明的。
【对于基本数据类型,按其取值是否可改变又分为常量和变量两种。在程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量。他们可与数据类型结合起来分类。例如:整型常量、整型变量、浮点常量、浮点变量、字符常量、字符变量、枚举常量、枚举变量。在程序中,常量是可以不经说明直接引用的,而变量则必须先定义后使用。(整形量包括整型常量和整型变量)。】
【常量和符号常量。符号常量:用标示符代表的一个常量。在C语言中,可以用一个标示符来标示一个常量,称之为符号常量。符号常量使用之前必须先定义,其一般形式为:
#define 标示符 常量 其功能是把该标示符定义为其后的常量值。一经定义,以后在程序中所有出现该标示符的地方均代之以该常量值。习惯上符号常量的标示符用大写字符,变量标示符用小写字母,以示区别。】
1 // 十进制、二进制、十六进制、八进制 2 3 /* 4 %d/%i 十进制形式输出证书 5 %c 输出字符 6 %p 输出地址 7 %f 输出小数 8 %o 八进制形式输出整数 9 %x 十六进制形式输出整数 10 */ 11 12 // 十进制 13 int number = 12; 14 15 // 二进制( 0b 或者 0B 开头) 16 int number2 = 0b1100; 17 18 // 十六进制 ( 0x 或者 0X 开头 ) 19 int number3 = 0xc; 20 21 // 八进制 (0开头) 22 int number4 = 014; 23 24 printf("%d\n", number3); 25 26 // 虽然表现形式不一样,但是在内存中都是以二进制形式存在。
内存中的二进制存储(一个字节BYTE = 8bit)。
数据是以补码表示的:
·正数的补码和原码相同;
·负数的补码:将该数的绝对值的二进制形式按位取反再加1。
例如:求-10的补码
10的原码: 0000 1010
取 反: 1111 0101
再加1,得-10的补码:1111 0110
【整型变量的分类(注意:这里占多少字节跟系统和编译器规定有关)
1)基本型:类型说明符为int,在内存中占4个字节
2)短整型:类型说明符为short int 或 short。所占字节和取值范围均与基本型相同。
3)长整型:类型说明符为long int 或 long。
4)无符号型:类型说明符为unsigned
】
【实型数据:实型也称为浮点型。实型常量也称为实数或者浮点数。在C语言中,实数只采用十进制。它有两种形式:十进制小数形式和指数形式
1)十进制小数形式:由数码0-9和小数点组成。(必须有小数点)
2)指数形式:由十进制数,加阶码标志”e“或”E“以及阶码(只能为整数,可以带符号)组成,其一般形式为:aEn(a为十进制数,n为十进制整数)
标准C允许浮点数使用后缀。后缀为‘f’或‘F’即表示该数为浮点数。如:365f和365.f是等价的。
实型数据在内存中的存放形式:实型数据一般占4个字节(32位)内存空间。按指数形式存储。
实数3.14159在内存中的存放形式如下:
】
【1.实型变量分为:单精度(float型)、双精度(double型)和长双精度(long double型)三类。
2.舍入误差
】
【字符型数据:包括字符常量和字符变量。
1)字符常量:字符常量是用单引号括起来的一个字符。例如'a'、'b'、'='都是合法字符常量
在C语言中,字符常量有以下特点:
a.字符常量只能用单引号括起来,不能用双引号或其他括号
b.字符常量只能是单个字符,不能使字符串
c.字符可以是字符集合中任意字符。但数字被定义为字符型之后就不能参与数值运算。如‘5’和5是不同的。‘5’是字符常量,不能参与运算。
2)字符变量:字符变量用来存储字符常量,即单个字符。
字符变量的类型说明符是char。字符变量类型定义的格式和书写规则都与整型变量相同。先定义在使用,例如:char a,b;
3)转义字符:转义字符是一种特殊的字符常量。转义字符以反斜线”\“开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,所以称为”转义“字符。转义字符主要用来表示那些用一般字符不便于表示的控制器代码。
字符数据在内存中的存储形式及使用方法:
每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ASCII码的形式存放在变量的内存单元之中的。
】
【字符串常量是由一对双引号括起来的字符序列。
字符串常量和字符常量是不同的量。
区别:
1)字符常量由单引号括起来;字符串常量由双引号括起来
2)字符常量只能是单个字符,字符串常量则可以含一个或多个字符。
3)字符常量占一个字节的内存空间,字符串常量占的内存字节数等于字符串中中字节数加1,增加的一个字节中存放字符“\0”(ASCII码为0)。这是字符串结束的标志。
例如:
'a'在内存中占一个字节,可表示为:。
“a”在内存中占二个字节,可表示为:。
】
【各类型数值数据之间的混合运算
变量的数据类型是可以转换的。转换的方法有两种:一种是自动转换,一种是强制转换。自动抓换是发生在不同数据类型的量混合运算时,由编译系统自动完成。
1、自动转换遵循以下规则:
1)若参与运算量的类型不同,则先转换成同一类型,然后进行运算。
2)转换按数据长度增加的方向进行,以保证精度不降低。如 int 型和 long 型运算时,先把 int 量转成 long 型后再进行运算
3)所有的浮点运算都是双精度进行的,即使仅含 float 单精度量运算的表达式,也要先转换成 double 型,再作运算。
4)char 型和 short 型参与运算时,必须先转换成 int 型
5)赋值运算中,赋值号两边的数据类型不同时,赋值号右边量的类型将转换为做变量的类型。如果右边量的数据类型比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。
2、强制转换:
其一般形式为:(类型说明符)(表达式)
其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。
注意的问题:
1)类型说明符和表达式都必须加括号(单个变量可以不加括号),如把 (int)(x+y)写成(int)(x)+y则把x转成成int型之后再与y相加了。
2)无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。
】
2.构造数据类型:构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型的值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型。在C语言中,构造类型有以下几种:
·数组类型
·结构体类型
·共用体(联合)类型
3、指针类型:指针是一种特殊的,同时又是具有重要作用的数据类型,其值用来表示某个变量在内存储器中的地址。虽然指针变量的取值类型于整形量,但这是两个类型完全不同的量,因此不能混为一谈。
4、空类型:在调用函数值时,向调用者返回的一个函数值。这个返回的函数值是具有一定的数据类型的,应在函数定义及函数说明中给以说明。有些函数,在调用后并不需要向点用着返回函数值,这种函数可以定义为“空类型”。其类型说明符为void。
版权声明: 本文由 【kingdev】 原创出品,欢迎转载,转载时请注明出处!