《c语言_数据的表示与运算》由会员分享,可在线阅读,更多相关《c语言_数据的表示与运算(29页珍藏版)》请在金锄头文库上搜索。
1、第二章l 本章要点n n数据的存储及数据类型数据的存储及数据类型n n数据的表示数据的表示常量和变量常量和变量n n数据的运算及其规则数据的运算及其规则2.1 数据的存储及数据类型 以二进制形式存储 计算机存储器的存储单元按字节编址 C语言针对不同类型的数据采用不同的 存储方式具体体现在不同的“数据 类型”上C语言提供了以下一些数据类型: 数据类型构造类型指针类型空类型(无值类型) void枚举类型 enum数组类型结构体类型 struct联合体类型 union基本类型整型 int字符型 char实型(浮点型)单精度实型float双精度实型double整数的存储方式: 以十进制补码形式存储。
2、一般整数占用的空间:Turbo C 2.0 :2个字节的存储单元Turbo C+3.0 :2个字节的存储单元VC+ 6.0:4个字节 根据占用空间和数值范围的不同细分为几种类型 :基本整型int 无符号的基本整型 unsigned int 短整型 short int 无符号的短整型 unsigned short int长整型 long int 无符号的长整型 unsigned long int类类型声明符字节节数取值值范围围int2-3276832767 即 -215(215-1)short int2-3276832767 即 -215(215-1)long int4-214748364821
3、47483647 即 -231(231-1) unsigned int2065535 即 0 (216-1)unsigned short2065535 即 0 (216-1)unsigned long404294967295 即 0 (232-1)以Turbo C+ 3.0为例:实数的存储形式:实数采用指数形式 存储,即浮点数。将实数转化为标准 化指数形式,分别 存储尾数部分和指 数部分。 类型 位数 绝对值范围 有效数字 float 4字节 10-38 1038 7 Double 8字节 10-308 10308 16 long double 16字节 10-4932 104932 19单个
4、字符的存储方式:存储字符的编码;目前大多数计算机采用ASCII代码;占用的空间:一个字节的存储空间。 例如: 字符A 为char类型,在内存中占1 字节,存储的是其ASCII码值65。2.2 程序中数据是如何表示的? 常量、变量 常量: 程序运行过程中,其值不能 被改变的量。常量也相应地 区分为不同的类型:#include void main() int i,x,s,avg; i=0; s=0; do scanf(“%d“, s=s+x; i=i+1; while(i void main() int a;a=32767+1; /* int+int */printf(“a=%d“,a); 运行时
5、显示 ?-3276801111111 11111111 32767 00000000 00000001 1 - 10000000 00000000 -32768 小心结果“溢出”!整型数据运算中应该注意的问题:请思考:long a;a=32767+1;a:-32768long a;a=32767L+1;a:3276800000000 00000000 01111111 11111111 32767L 00000000 00000000 00000000 00000001 1 - 00000000 00000000 10000000 00000000 32768 (1)字符本质上是整数,既可以当
6、作字符,也可以当 作整数使用;printf(“%c,%d,%c,%c” , a , a , a-32 , 97-32 );运行时显示 ?a , 97 , A , A字符型数据注意的问题:(2)有些特殊字符无法正常表示出来,需要使用转 义符“”进行转义。 换行符(ASCII码值为10)表示为n,即把字 母n转义为换行符。如:int a=10,b=20;printf(“a=%dnb=%dn”, a , b );转义 字符表示含义ASCII码 反斜杠字符“”92单引号字符39”双引号字符34n换行,将当前位置移到下一行开头10t水平制表,横向跳到下一个输出区9r回车,将当前位置移到本行开头13f打印
7、换页 ,将当前位置移到下页开头12b退格,将当前位置移到前一列8ddd1到3位八进制数所代表的字符xhh1到2位十六进制数所代表的字符printf(“a=%dtb=%ctTCPIPn“,26,101); 变量: 指在程序的执行过程中其值 可以发生变化的量。#include void main() int i,x,s,avg; i=0; s=0; do scanf(“%d“, s=s+x; i=i+1; while(i | )(5)赋值运算符 (及其扩展赋值运算符) (6)条件运算符 (?:) (7)逗号运算符 (,)(8)指针运算符 (*和) (9)求字节数运算符(sizeof) (10)强制
8、类型转换运算符( (类型) ) (11)分量运算符(-) (12)下标运算符( ) (13)其他 (如函数调用运算符()关系运算符: ( ! )(1)关系表达式的值:真1,假0例如:if(+b=10) if(x%2=0) if(a!=b) if(c=A)(2)优先级与结合性:左结合例如:if(ab=0) if(bc) if(Ab (3)优先级与结合性:右结合例如:a=b=c=0; 等价于 a=(b=(c=0);(4)右侧表达式类型与变量类型不符时如何转换?原则:以变量类型为准自动变换。优先级与结合性优先级与结合性C语言的表达式加上分 号成为一条语句。赋值运算符: ( 以及扩展的赋值运算符)(5
9、)扩展的复合赋值运算符:+= -= *= /= %=例如:a+=b*2/3;等价于:a=a+(b+2/3);优先级与结合性优先级与结合性条件运算符: ( ? :)例如:printf(“%dn“,ab?a:b);d=ab?a:bc?b:c; /*右结合性*/逗号运算符: ( , )例如:a=10,b=a+20,c=90 ;左结合性;整个表达式的值取最后一个表达式的值。优先级与结合性优先级与结合性高优先级运算符功能结合性高低! -、+、- (类型名) *、&、sizeof逻辑 非 取负、自增、自减 强制类型转换 指针、地址、求字节数从右到左*、/、%乘、除、整数求余从左到右 +、-加、减从左到右 、=、=大于、大于等于 小于、小于等于从左到右=、!=等于、不等于从左到右 &逻辑 与从左到右 |逻辑 或从左到右 ?:条件运算符从右到左 =、+=、-=、 *=、/=、%=赋值 、运算并赋值从右到左,逗号运算符从左到右返回返回作业:一、二、三、四(1,2)、五