0x03-数据和C
数据和C
数据:数据类型和关键字
c语言的基本数据类型和关键字
K&C给出了7个于类型相关的关键字。C90标准添加了2个关键字,C99标准又添加了3个关键字
最初K&C给出的关键字 | C90标准添加的关键字 | C99标准添加的关键字 |
---|---|---|
int | signed | _Bool |
long | void | _Complex |
short | _Imaginary | |
unsigned | ||
char | ||
float | ||
double |
在C语言中:
int关键字:表示基本的整数类型。
long、short、unsigned和signed关键字:用于提供基本整数类型的变式。
例如:unsigned short int 和 long long int
char关键字:用于指定字母和其他字符。(char类型也可以表示较小的整数。)
例如:#、$、%和 *
float、double和long double关键字:表示带小数点的数。
_Bool关键字:表示布尔值。(true和false)
_complex关键字*:表示复数。
_Imaginary关键字:表示虚数。
通过这些关键字创建的数据类型,按计算机的存储方式可分为两大基本类型:整数类型和浮点数类型。
整数和浮点数
1.整数没有小数部分,浮点数有小数部分
2.浮点数可以表示的范围比整数大。
3.对于一些算数运算(如:两个很大的数相减),浮点数损失的精度更多。
0x1-int类型
0x1.1-声明变量和初始化变量
例如:int关键字的声明和初始化
声明:int dogs; #声明gods是一个int类型的变量,即为gods变量创建和标记存储空间同时告诉C编译器它是一个int类型的变量。
初始化:int dogs = 3; #声明并初始化变量,为dogs创建内存空间并赋值为3
同时声明和初始化多个变量:
int dogs, pigs, apples;
int dogs = 3, pigs = 4, apples = 5;
0x1.2-int类型常量
像34、25、56等都是整型常量或整型字面量。
C语言把不含小数点和制数的数作为整数。
22和-44都是整型常量,但是22.0和2.2E1则不是。
C语言把大多数整型常量视为int类型,但是非常大的整数除外。
(此处设计long常量和long long常量,在long int类型再讨论)
0x1.3-打印int值
c语言中可以使用printf()函数打印int类型的值,%d指明了在一行中打印整数的位置。
%d称为转换说明,它指定了printf()应使用什么格式来显示一个值。
格式化字符串中的每个%d都与待打印变量列表中相应的int值匹配。
这个值可以是int类型的变量、int类型的常量或其他任何值为int类型的表达式。
要确保转换说明的数量与待打印的数量相同,编译器不会捕捉这一类型的错误,如果不匹配它就会打印一些乱七八糟的数据出来。
0x1.4-八进制和十六进制
通常,C语言都假定整型常量是十进制数。然而,许多程序员更喜欢用八进制或十六进制,因为8和16是2的幂,而10却不是。显然,八进制和十六进制计数系统在表达与计算机相关的值时很方便。
例如:十进制65535经常出现在16位机中,用十六进制表示刚好时10000.另外十六进制的每一位恰好由四位二进制数表示。
0x或0X前缀表示十六进制,例如:十进制数16表示成十六进制是0x10或0X10.
0(数字0)前缀表示8进制,例如:十进制数16表示成八进制是020.
0x1.5-显示八进制和十六进制
在c程序中使用和显示不同的进制数,需要使用不同的转换说明。如果需要显示前缀可以在转换说明中加入#号。
进制 | 转换说明 | 显示前缀 |
---|---|---|
八进制 | %o(字母o) | %#o |
十进制 | %d | %#d |
十六进制 | %x或%X | %#x或%#X |
0x2-其他整数类型
c语言提供3个附属关键字修饰基本整数类型:short、long和unsigned。
类型 | 简写或其他写法 | 说明 | 备注 |
---|---|---|---|
short int | short | 占用空间可能比int类型少,常用于较小数值场合以节省空间 | 与int类似,short是有符号类型 |
long int | long | 占用空间可能比int多,适用于较大数值的场合 | 与int类似,long是有符号类型 |
long long int | long long | C99标准加入,占用的存储空间可能比long多,适用于更大数值的场合。该类型至少占64位。 | 与int类似,long long是有符号类型 |
unsigned int | unsigned | 只用于非负值的场合,这种类型与有符号类型表示的范围不同。 | 无符号类型 |
unsigned long int | unsigned long | C90添加标准 | |
unsigned int | unsigned short | C90添加标准 | |
unsigned long long int | unsigned long long | C99添加标准 |
unsigned int属于无符号类型,这种类型与有符号类型表示的范围不同。例如:16位unsigned int允许的取值范围是0-65535,而不是-32768-32767.用于表示正负号的位现在用于表示另一个二进制位,所以无符号类型可以表示更大的数。
在任何有符号类型前面添加关键字signed,可强调使用有符号类型的意图。例如,short、short int、signed short、signed short int都表示同一种类型。