✉ C的数据类型
数据类型
✉ 常量
✉ 在程序运行过程中,其值不能被改变的量称为常量,常量区分类型 ,12、0、-3等为整型常量,4.5、-1.23等为实型常量,’a’、’g’等为字符型常量。一般可以通过常量的表达形式判断常量的类型。
#define RATE 8.54
#define RATE 8.54
✉ void main( void )
✉ {
✉ int result;
✉ result = 1000.0 * RATE;
✉ printf( “result is %f \n”, result );}
✉ 通常情况下,常量名的定义采用大写
✉ 使用符号常量的好处:1、含义清楚。2、在需要改变一个常量时能做到“一改全改”
✉ 变量
✉ 其值可以改变的量称为变量。
✉ C语言中标识符(变量名)命名规则 :
1、只能由英文字母、数字字符、下划线构成,且第一个字符必须是英文字母(大写或小写)或下划线。
2、在C语言中,变量名长度以简洁为目标,尽量做到“见名知义”力求程序凝练,Turbo C允许32个字符。
3、变量名一般以小写英文字母形式命名。
1、只能由英文字母、数字字符、下划线构成,且第一个字符必须是英文字母(大写或小写)或下划线。
2、在C语言中,变量名长度以简洁为目标,尽量做到“见名知义”力求程序凝练,Turbo C允许32个字符。
3、变量名一般以小写英文字母形式命名。
✉ 变量必须“先定义、后使用”
1、没定义的,不作为变量名,保证程序中变量名使用的正确 2、为变量制定类型,编译时好分配存储单元 3、指定类型 3、容易检验运算的合法性
✉ 整型数据
✉ 整型常量
整型常量即整型常数 十进制整数 八进制整数(以0开头的数)十六进制整数(以0x开头的数)
整型常量即整型常数 十进制整数 八进制整数(以0开头的数)十六进制整数(以0x开头的数)
✉ 整型变量的分类
整型变量总体上可以分为有符号数和无符号数两类
整型变量总体上可以分为有符号数和无符号数两类
✉ 整型数据
✉ 整型数据在内存中的存放形式
整型数据在内存中以二进制形式存放,确切的说是以
补码的形式表示的。
一个正数的补码和原码形式相同,而负数的补码是将该数的绝对值的二进制形式,按位取反
整型数据在内存中以二进制形式存放,确切的说是以
补码的形式表示的。
一个正数的补码和原码形式相同,而负数的补码是将该数的绝对值的二进制形式,按位取反
再加1。
✉ 整型数据
✉ 整型变量的定义
用定义类型字来定义变量的类型 ,一般放在函数开头的声明部分 。
void main( void )
{
int a, b, c, d; /* 定义整型变量 */
unsigned u;
a = 12; b = -24; u = 10;
c = a + u; d = b + u;
printf( “a + u = %d \t b + u = %d \n”, c, d );
}
用定义类型字来定义变量的类型 ,一般放在函数开头的声明部分 。
void main( void )
{
int a, b, c, d; /* 定义整型变量 */
unsigned u;
a = 12; b = -24; u = 10;
c = a + u; d = b + u;
printf( “a + u = %d \t b + u = %d \n”, c, d );
}
✉ 整型数据的溢出
如果一个整形变量存放的值,超出它所允许的范围,将会产生溢出,例如一个int型变量,如
如果一个整形变量存放的值,超出它所允许的范围,将会产生溢出,例如一个int型变量,如
果其值为32767,再加1就会产生溢出,变成-32768。但运行时并不报错。
✉ 整型数据
复合赋值运算符的含义✉ 整型常量的类型
注意:
1、一个整常量,如果其值在-32768~+32767范围内,认为它是int型,它可以赋给int型和long int型变量。
2、一个整常量,如果其值超过了上述范围,而在-2147483648~+2147483647范围内,则认为它是long int 型。
3、一个整常数后面加一个字母u或U,认为是unsigned int 型。
4、一个整常数后面加一个字母l或L,认为是long int型常数。
注意:
1、一个整常量,如果其值在-32768~+32767范围内,认为它是int型,它可以赋给int型和long int型变量。
2、一个整常量,如果其值超过了上述范围,而在-2147483648~+2147483647范围内,则认为它是long int 型。
3、一个整常数后面加一个字母u或U,认为是unsigned int 型。
4、一个整常数后面加一个字母l或L,认为是long int型常数。
✉ 实型数据
✉ 实型常量的表示方法
1、十进制小数形式:.123 23.1
1、十进制小数形式:.123 23.1
2、 指数形式:123e3 1.234e34(e前必须有数字,e后指数必须为整数)
在数的后面加字母f或F,就为单精度数,否则处理成双精度数。
在数的后面加字母f或F,就为单精度数,否则处理成双精度数。
✉ 实型变量
单精度(float): 4B 10-38~1038 6~7
双精度(double):8B 10-308~10308 15~16
长双精度: 16B 10-4931~104932 18~19
单精度(float): 4B 10-38~1038 6~7
双精度(double):8B 10-308~10308 15~16
长双精度: 16B 10-4931~104932 18~19
✉ 实型数据在内存中的存放形式
一个实型数据一般在内存中占四个字节,系统把一个实型数分成小数部分和指数部分,分别存放采用规范化的指数方式示,如:
一个实型数据一般在内存中占四个字节,系统把一个实型数分成小数部分和指数部分,分别存放采用规范化的指数方式示,如:
✉ 实型数据
实型变量的定义示例:
float x,y; /*指定x、y为单精度实数*/
double z; /*指定z为双精度实数*/
✉ 字符型数据
✉ 字符常量
C语言的字符常量是用单引号括起来的一个字符 ,如’a’,’X’,’A’。C语言还有一些特殊字符的常量,如下表
C语言的字符常量是用单引号括起来的一个字符 ,如’a’,’X’,’A’。C语言还有一些特殊字符的常量,如下表
✉ 字符型数据
✉ 字符型数据
main()
{
char c1,c2;
c1=97;
c2=98;
printf(“%c %c\n”,c1,c2);
printf(“%d %d\n”,c1,c2);
}
✉ 字符型数据
✉ 例子 大小写字母的转换
main( )
{char c1,c2;
c1=‘a’;
c2=‘b’;
c1=c1-32;
c2=c2-32;
printf(“%c %c”,c1,c2);
main( )
{char c1,c2;
c1=‘a’;
c2=‘b’;
c1=c1-32;
c2=c2-32;
printf(“%c %c”,c1,c2);
}
✉ 字符型数据
✉ 字符串常量
字符常量是用一对双引号括起来的字符序列。
如:"How do you do ." "CHINA" "a" "$135.45"
可以用printf语句输出一个字符串常量:
printf("How do you do .\n");
注意:字符常量与字符串常量的区别:
"a" ‘a’
C规定:在每一个字符串的结尾加一个字符串结束标志: "\0",以此判断字符串是否结束。
✉ 变量赋初值
变量赋值的方式分为两种:
1、先说明,再赋值。如:
int x,y;
x=10;y=20;
2、说明变量的同时赋值。这称为变量的初始化。如:
float x=123.45;(等价于 float x;x=123.45;)
int a,b,c=10;
int a=13,b=34,c=2;
float f=3.56;
✉ 各类数值型数据间的混合运算
✉ 数据类型转换
整型、实型、字符型数据间可以混合运算。
例如:10+’a’+1.5×2 -’b’=12.0000
在运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换的规则如下所示:
整型、实型、字符型数据间可以混合运算。
例如:10+’a’+1.5×2 -’b’=12.0000
在运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换的规则如下所示:
高 double float
long
unsigned
低 int char,short
✉ 算术运算符和算术表达式
✉ C运算符简介
C语言的运算符有以下几类∶
1.算术运算符 (+ - * / % ++ --)
2.关系运算符 (< > == >= <= !=)
3.逻辑运算符 (! && ||)
4.位运算符 (<< >> ~ | ^ &)
5.赋值运算符 (=及其扩展赋值运算符)
6.条件运算符 (? :)
7.逗号运算符 (,)
8.指针运算符 (*和&)
9.求字节数运算符 (sizeof)
10.强制类型转换运算符 (类型)
11.分量运算符 (.和->)
12.下标运算符 ([ ])
13.其它 (函数调用运算符( ))
2.关系运算符 (< > == >= <= !=)
3.逻辑运算符 (! && ||)
4.位运算符 (<< >> ~ | ^ &)
5.赋值运算符 (=及其扩展赋值运算符)
6.条件运算符 (? :)
7.逗号运算符 (,)
8.指针运算符 (*和&)
9.求字节数运算符 (sizeof)
10.强制类型转换运算符 (类型)
11.分量运算符 (.和->)
12.下标运算符 ([ ])
13.其它 (函数调用运算符( ))
✉ 算术运算符和算术表达式
✉ 基本算术运算符号
+ (加法运算符,或正值运算符。)
+ (加法运算符,或正值运算符。)
- (减法运算符,或负值运算符。)
* (乘法运算符)
/ (除法运算符)
% (模运算符,要求%两侧均为整型数)
✉ 算术表达式和运算符的优先级与结合性
用算术运算符和括号将操作数连接起来的符合C语言语法规则的式子,称为C算术表达式。
运算对象包括常量、变量、函数等等。例如∶
用算术运算符和括号将操作数连接起来的符合C语言语法规则的式子,称为C算术表达式。
运算对象包括常量、变量、函数等等。例如∶
a * b / c - 1.5 + ‘a’
在表达式求值时,先按照运算符的优先级别高低次序执行。
算术运算符的结合方向为“自左至右”。
优先级别和结合性参考附录Ⅲ
在表达式求值时,先按照运算符的优先级别高低次序执行。
算术运算符的结合方向为“自左至右”。
优先级别和结合性参考附录Ⅲ
✉ 算术运算符和算术表达式
✉ 强制类型转换运算符
将一个表达式转换成所需的类型 。
一般形式为∶
将一个表达式转换成所需的类型 。
一般形式为∶
(类型名) (表达式)
注意:表达式应该用括号括起来。例如∶
(double)a /* 将a转换成double类型 */
(int)(x+y) /* 将x+y的值转换成整型 */
(float)(5%3) /* 将5%3的值转换成float型 */
✉ 总结:类型转换有两种:1、自动类型转换
2、强制类型转换
2、强制类型转换
✉ 算术运算符和算术表达式
✉ 自增、自减运算符
作用是使变量的值增1或减1。例如∶
作用是使变量的值增1或减1。例如∶
++i, --i /* 在使用i之前先使i的值加(减)1 */
i++, i-- /* 在使用i之后再使i的值加(减)1 */
✉ 算术运算符和算术表达式
✉ 有关表达式使用中的问题说明
1、表达式中包含自增或自减运算时,很容易出错。
例如:(i++)+(i++)+(i++)
不同系统处理的不同,如i为3,可为3+4+5,也可为3+3+3,为避免歧义性,如果想得到12,可以写成如下:
i=3: a=i++; b=i++; c=i++;
1、表达式中包含自增或自减运算时,很容易出错。
例如:(i++)+(i++)+(i++)
不同系统处理的不同,如i为3,可为3+4+5,也可为3+3+3,为避免歧义性,如果想得到12,可以写成如下:
i=3: a=i++; b=i++; c=i++;
d = a+b+c;
✉ 2、C语言中有的运算符为一个字符,有的运算符由两个字符组成,在表达式中尽可能多的“自左而右”组成一个运算符 。如:i+++j应解释为(i++)+j,而不是i+(++j)。
✉ 3、在调用函数时,实参数的求值顺序,标准C中并没有统一规定。如:设i的初值为3,下面的函数调用
printf( “%d %d\n”, i, i++ )
在有的系统中,从左到右求值,输出“3,3”。在多数系统中,是从右到左求值,输出“4,3”。最好改成j=i++; printf(“%d,%d”,I,j);
不要写别人看不懂,也不知道系统会怎样执行的程序
✉ 赋值运算符和赋值表达式
✉ 赋值运算符
赋值符号“=”就是赋值运算符 ,它的作用就是把一个数据赋给一个变量。
赋值符号“=”就是赋值运算符 ,它的作用就是把一个数据赋给一个变量。
✉ 类型转换
如果等号两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。
如果等号两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。
1、将实型数据赋给整型变量时,舍去实数的小数部分。
int i=3.56,则i=3
2、将整型数据赋给单、双精度变量时,数值不变;但以浮点数形式存储到变量中。
float f=23,则f=23.00000
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论