之一(基本数据类型、运算符与表达式).ppt_第1页
之一(基本数据类型、运算符与表达式).ppt_第2页
之一(基本数据类型、运算符与表达式).ppt_第3页
之一(基本数据类型、运算符与表达式).ppt_第4页
之一(基本数据类型、运算符与表达式).ppt_第5页
已阅读5页,还剩75页未读 继续免费阅读

VIP免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第2 2章章 基本数据类型、基本数据类型、 运算符与表达式运算符与表达式 下一讲 第2章:基本数据类型、运算符与表达式 uu学习的意义学习的意义 学习C语言的目的是什么? 目的可能是为了: 期末考试 等级考试 研究生考试 程序员考试 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 最终目的是:最终目的是:用用C C语言编写语言编写程序程序来解决实际问题!来解决实际问题! 程 序 是什么? 程序是解决某种问题的一组指令的有序集合。 著名计算机科学家沃思(Nikiklaus Wirth)提 出一个公式: 程序 = 数据结构 + 算法 uu学习的意义学习的意义 程序是什么?程序是什么? 对数据的描述。对数据的描述。 在在C C语言中,体语言中,体 现为现为数据类型数据类型的的 描述!描述! 对数据处理的描述。对数据处理的描述。 是为解决一个问题而是为解决一个问题而 采取的方法和步骤,采取的方法和步骤, 是是程序程序的的灵魂灵魂! 结论:学好结论:学好C C语言首先语言首先 就必须十分了解就必须十分了解C C语言语言 的数据类型、运算符的数据类型、运算符 与表达式。与表达式。 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 掌握变量和常量的概念; 理解各种类型的数据在内存中的存放形式; 掌握各种类型数据的常量的使用方法; 掌握各种整型、字符型、浮点型变量的定义和引 用方法; 了解调用printf函数输出各种类型数据的方法; 掌握数据类型转换的规则以及强制数据类型转换 的方法; 掌握赋值运算符、算术运算符、位运算符、逗号 运算符以及sizeof的使用方法; 理解运算符的优先级和结合性的概念,记住所学 的各种运算符的优先级关系和结合性。 uu学习目标学习目标 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 2.1.1 C语言数据类型 C C 数数 据据 类类 型型 基本类型基本类型 构造类型构造类型 指针类型指针类型 空类型空类型voidvoid 定义类型定义类型typedeftypedef 字符类型字符类型charchar 枚举类型枚举类型enumenum 整整 型型 实型实型 单精度型单精度型floatfloat 双精度型双精度型doubledouble 数组数组 结构体结构体structstruct 共用体共用体unionunion 短整型短整型shortshort 长整型长整型longlong 整型整型intint 数据类型决定:数据类型决定: 1. 1. 数据占内存字节数数据占内存字节数 2. 2. 数据取值范围数据取值范围 3. 3. 可对它进行的操作可对它进行的操作 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 本章所介绍本章所介绍 的数据类型的数据类型 2.1.2数据在计算机内的存储形式 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 字符型数据是以ASCII码值存储在计算机中,占用1个字节 例如字符A存放形式: 0 1 0 0 0 0 0 1 例如字符E存放形式: 0 1 0 0 0 1 0 1 A的ASCII 码值65 E的ASCII 码值69 整型数据存储在计算机中,占用2个字节 例如9存放形式: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 最高位是符号位,其值0表示正数,1表示负数。 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 例如-9存放形式: 2.1.2数据在计算机内的存储形式 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 单精度实型数据存储在计算机中,占用4个字节 例如26.7510=(11010.11)2 =(-1)025 (0.1101011)2 26.75的存储形式: 0 1 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 S M E 31 30 8 7 0 其中S表示数值的正负号,0表示正,1表示负。 M表示规格化的数值,即小数的首位为1。M确定了数值的精度。 E用移码表示指数。 浮点数的一般表达形式(-1)S 2e规格化的尾数 E= 27 +e -27e27 -26.75的存储形式: 1 1 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 2.2 常量、变量和标识符 1. 标识符 定义:用来标识变量、常量、函数等的字符序列 组成: 只能由字母、数字、下划线组成,且第一个字母必须是字母或 下划线 C语言的关键字不能用作变量名 大小写敏感 长度:有效长度为32个字符。随系统而异,但至少前8 个字符有效 命名原则: 变量名和函数名中的英文字母一般用小写,以增加可读性 见名知意 不宜混淆 如l与I, o与0 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 在在TC2.0TC2.0及及BC3.1BC3.1中,变量名(标 中,变量名(标 识符)的有效长度为个字符识符)的有效长度为个字符 ,缺省值为,但在,缺省值为,但在VCVC中其长度可中其长度可 达到达到255 255 例:判断下列标识符号合法性 sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 char ab _above $123 M.D.John3days #33 char$123ab .字符非法字符非法 数字数字3 3不可作首字符不可作首字符 # # 字符非法字符非法 charchar是关键字是关键字 字符非法字符非法 $ $不可作首字符不可作首字符 2.2 常量、变量和标识符 2. 常量 定义:程序运行时其值不能改变的量(即常数) 常量的分类 : 直接常量( 值常量或称为字面产量) 整型常量: 10、15、-10、-30 实型常量: 12.5、 30.0、-1.5 字符常量: A、b、c 字符串常量: “sum”、“A”、“123” 符号常量 用标识符来代表常量。 其定义格式为: 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C #define define 符号常量符号常量标识符标识符 常量 常量 #define NUM 20 #define PI 3.1415926 #include #define PRICE 30#define PRICE 30 void main ( )void main ( ) intint num, total; num, total; num = 10; num = 10; total = num * total = num * PRICEPRICE; ; printfprintf (“total = %d“, total); (“total = %d“, total); 运行结果:total = 300 # #开头的语句行尾不能有分号开头的语句行尾不能有分号 definedefine前面一定要有前面一定要有# # 符号常量名最好使用大写符号常量名最好使用大写 符号常量名最好有意义符号常量名最好有意义 2.2 常量、变量和标识符 3. 变量 定义:程序运行时其值可以被改变的量 变量的三要素 :类型 、名称、值 变量的定义格式 : 变量的初始化:定义时赋初始值 变量的使用:先定义,后赋值 变量定义位置:一般放在函数开头 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 存储类型存储类型 数据类型数据类型 变量名变量名11,变量名,变量名2 2,变量名,变量名nn; int x, y, z; float radius, length, area; char ch; 决定分配字节数 和数的表示范围 合法标识符 例: int a = 2, b, c = 4; float data = 3.67; char ch = A; int x = 1, y = 1, z = 1; 编译程序根据变量定义为其 分配指定数目的内存单元 地址 short int a=1, b=-3, c; a b c 2字节 2字节 2字节 地址 地址 内存 . . 1 -3 随机数 例1: int student; stadent = 19; /Undefined symbol stadent in function main 例2: float a,b,c; c = a % b; /Illegal use of floating point in function main void main ( ) int a, b = 2; float data; a = 1; data = (a + b) * 1.2; printf (“data=%fn”, data); 变量定义 可执行语句 void main ( ) int a, b = 2; a = 1; float data; data = (a + b) * 1.2; printf(“data=%fn”,data); 2.3 简单数据类型与表示范围 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 1. 1. 整型数据整型数据 整型常量整型常量 l l 十进制整数:十进制整数:由数字由数字0 09 9和正负号表示和正负号表示 . . 如如:123,-456,0:123,-456,0 l l八进制整数:由数字八进制整数:由数字0 0开头,后跟数字开头,后跟数字0 07 7表示表示. .如如:0:0123123,0,01111 l l十六进制整数:由十六进制整数:由0x0x或或0X0X开头开头, ,后跟后跟0 09,a9,af,Af,AF F表示表示. .如如 0x0x123123,0X,0Xffff 定义整数的符号常量 #define NUM1 20 /十进制数20 #define NUM2 020 /八进制数(十进制16) #define NUM3 0x2a /十六进制数(十进制42) 思考题:下列整型常量哪些是非法的? 012,oX7A,00,078,0x5Ac,-0xFFFF,0034,7B。 首字符不能 是字母o 八进制数中不 能有数字8 十进制数中不 能有字母B 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 2. 2. 整数在内存中的表示整数在内存中的表示 整数的数值在内存中用补码的形式存放。整数的数值在内存中用补码的形式存放。 求一个整数补码的方法:求一个整数补码的方法:(假设用(假设用n n个二进制位的内存单个二进制位的内存单 元来存储它)元来存储它) 如果是正整数如果是正整数,采用符号,采用符号- -绝对值表示,即最高有效位(绝对值表示,即最高有效位( 符号位)为符号位)为0 0表示正,数的其余部分则表示数的绝对值;表示正,数的其余部分则表示数的绝对值; 如果是负整数如果是负整数,则先写出与该负数相对应的正数的补码,则先写出与该负数相对应的正数的补码 表示,然后将其按位求反,最后在末位(最低位)加表示,然后将其按位求反,最后在末位(最低位)加1 1; 然后将上述求得的补码的低然后将上述求得的补码的低n n位存放于内存单元之中,就位存放于内存单元之中,就 得到了该整数在内存中的表示,内存单元的最高位是符号得到了该整数在内存中的表示,内存单元的最高位是符号 位(位(0 0表示正,表示正,1 1表示负)。表示负)。 在在TC2.0TC2.0或或BC3.1BC3.1下,一个整数默认情况下需要下,一个整数默认情况下需要2 2 个字节(个字节(1616位)的内存单元存放;而在位)的内存单元存放;而在VC6.0VC6.0下下, ,则则 需要需要4 4个字节(个字节(3232位)。位)。 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 2. 2. 整数在内存中的表示整数在内存中的表示 十进制整数十进制整数 13:13: 对于对于1616位的内存单元位的内存单元: 符号位符号位( (表示正表示正) ) 00001101 00000000 低字节 高字节 低地址 高地址 符号位 十进制数十进制数+13+13两个字节的内存实际存放形式两个字节的内存实际存放形式 (+13)(+13)补 补 = = 0 0000 000 00000000 00000000 1101 1101 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 2. 2. 整数在内存中的表示整数在内存中的表示 十进制整数十进制整数 13:13: 对于对于3232位的内存单元位的内存单元: 符号位符号位( (表示正表示正) ) 低字节 高字节 低地址 高地址 十进制数十进制数+13+13四个字节的内存实际存放形式四个字节的内存实际存放形式 (+13)(+13)补 补 = = 0 0000 000 00000000 00000000 00000000 0000 0000 00000000 0000 1101 0000 1101 00001101 00000000 00000000 00000000 符号位 记住:记住:数据在内存中的存放位置是高位数字放在高地址数据在内存中的存放位置是高位数字放在高地址 的存储单元中,低位数字放在低地址的存储单元中的存储单元中,低位数字放在低地址的存储单元中。 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 2. 2. 整数在内存中的表示整数在内存中的表示 十进制整数十进制整数 13:13: 对于对于1616位的内存单元位的内存单元: 符号位符号位( (表示负表示负) ) 11110011 11111111 低字节 高字节 低地址 高地址 符号位 十进制数十进制数-13-13两个字节的内存实际存放形式两个字节的内存实际存放形式 (+13)(+13)补 补 = = 0 0000 000 00000000 00000000 1101 1101 (-13)(-13)补 补 = = 1 1111 1111 111 1111 11111111 0011 0011 按位求反,末位加按位求反,末位加1 1 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 2. 2. 整数在内存中的表示整数在内存中的表示 十进制整数十进制整数 13:13: 对于对于3232位的内存单元位的内存单元: 符号位符号位( (表示负表示负) ) 低字节 高字节 低地址 高地址 十进制数十进制数-13-13四个字节的内存实际存放形式四个字节的内存实际存放形式 (+13)(+13)补 补 = = 0 0000 000 00000000 00000000 00000000 0000 0000 00000000 0000 1101 0000 1101 11110011 11111111 11111111 11111111 符号位 (-13)(-13)补 补 = = 1 1111 111 11111111 11111111 11111111 1111 1111 11111111 11111111 0011 0011 按位求反,末位加按位求反,末位加1 1 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 2. 2. 整数在内存中的表示整数在内存中的表示 十进制整数十进制整数 65537:65537: 对于对于1616位的内存单元位的内存单元: 符号位符号位( (表示负表示负) ) (+65537)(+65537)补 补 = = 0 01 0000 1 0000 00000000 00000000 0001 0001 (-65537)(-65537)补 补 = = 1 10 1111 0 1111 11111111 11111111 11111111 按位求反,末位加按位求反,末位加1 1 11111111 11111111 低地址 高地址 十进制数十进制数-65537-65537两个字节的内存实际存放形式两个字节的内存实际存放形式 低字节 高字节 符号位 取取 低低 1616 位位真值为:真值为:-1,-1,不是不是-65537!-65537! 溢出! 溢出! 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 2. 2. 整数在内存中的表示整数在内存中的表示 十进制整数十进制整数 65537:65537: 对于对于3232位的内存单元位的内存单元: 符号位符号位( (表示负表示负) ) 低字节 高字节 低地址 高地址 十进制数十进制数-65537-65537四个字节的内存实际存放形式四个字节的内存实际存放形式 (+65537)(+65537)补 补 = = 0 0000 000 00000000 00000000 0001 0000 0001 0000 0000 0000 00000000 0001 0001 11111111 11111111 11111110 11111111 符号位, 表示负 (-65537)(-65537)补 补 = = 1 1111 111 11111111 11111111 1110 1111 1110 1111 1111 1111 11111111 11111111 按位求反,末位加按位求反,末位加1 1 真值为:真值为: -65537!-65537! 为什么为什么-65537-65537这个数在这个数在1616位内存单元中的表示与在位内存单元中的表示与在3232位位 内存单元中的表示不相同呢?内存单元中的表示不相同呢? 这主要是因为这主要是因为-65537-65537这个数超出了这个数超出了1616位内存单元表示数位内存单元表示数 的范围的范围,所以实际存储的值(,所以实际存储的值(-1-1)与要表示的值()与要表示的值(-65537-65537 )不同,但)不同,但-32767-32767并没有超出了并没有超出了3232位内存单元表示数的范位内存单元表示数的范 围,所以实际存储的值就是其本身。因此,我们在围,所以实际存储的值就是其本身。因此,我们在C C语言中语言中 对数据处理时必须要注意数据的表示范围,以免引起不必对数据处理时必须要注意数据的表示范围,以免引起不必 要的错误要的错误。 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 2. 2. 整数在内存中的表示整数在内存中的表示 八进制整数八进制整数 034:034: 对于对于1616位的内存单元位的内存单元: 034 = (011 100)034 = (011 100) 2 2 符号位符号位( (表示正表示正) ) 00011100 00000000 低字节 高字节 低地址 高地址 符号位 八进制数八进制数034034两个字节的内存实际存放形式两个字节的内存实际存放形式 (034)(034)补 补 = = 0 0000 000 00000000 0001 1100 0001 1100 对于对于3232位的内存单元位的内存单元: (034)(034)补 补 = = 0 0000 000 00000000 00000000 00000000 0000 0000 00000000 0001 1100 0001 1100 符号位符号位( (表示正表示正) ) 低字节 高字节 低地址 高地址 八进制数八进制数034034四个字节的内存实际存放形式四个字节的内存实际存放形式 00011100 00000000 00000000 00000000 符号位 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 2. 2. 整数在内存中的表示整数在内存中的表示 八进制整数八进制整数 034:034: 对于对于1616位的内存单元位的内存单元: 符号位符号位( (表示负表示负) ) 11100100 11111111 低字节 高字节 低地址 高地址 符号位 八进制数八进制数-034-034两个字节的内存实际存放形式两个字节的内存实际存放形式 (+034)(+034)补 补 = = 0 0000 000 00000000 0001 1100 0001 1100 (-034)(-034)补 补 = = 1 1111 1111 1110 0100111 1111 1110 0100 按位求反,末位加按位求反,末位加1 1 对于对于3232位的内存单元位的内存单元: (+034)(+034)补 补 = = 0 0000 000 00000000 00000000 00000000 0000 0000 00000000 0001 1100 0001 1100 按位求反,末位加按位求反,末位加1 1 (-034)(-034)补 补 = = 1 1111 111 11111111 11111111 11111111 1111 1111 11111111 1110 0100 1110 0100 符号位符号位( (表示负表示负) ) 11100100 11111111 11111111 11111111 低字节 高字节 低地址 高地址 八进制数八进制数-034-034四个字节的内存实际存放形式四个字节的内存实际存放形式 符号位 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 2. 2. 整数在内存中的表示整数在内存中的表示 十六进制整数十六进制整数 0X8AB6:0X8AB6: 对于对于1616位的内存单元位的内存单元: 0X8AB6=(1000 1010 1011 0110)0X8AB6=(1000 1010 1011 0110) 2 2 符号位符号位( (表示正表示正) ) 10110110 10001010 低字节 高字节 低地址 高地址 符号位 表示负 十六进制数十六进制数0X8AB60X8AB6两个字节的内存实际存放形式两个字节的内存实际存放形式 (0X8AB6)(0X8AB6)补 补 = = 0 0 1000 1010 1011 01101000 1010 1011 0110 取取 低低 1616 位位真值为:真值为:-30026 !-30026 ! 对于对于3232位的内存单元位的内存单元: (0X8AB6)(0X8AB6)补 补 = = 0 0000 000 00000000 00000000 00000000 1000 1010 1011 0110 1000 1010 1011 0110 符号位符号位( (表示正表示正) ) 10110110 10001010 00000000 00000000 低字节 高字节 十六进制数十六进制数0X8AB60X8AB6四个字节的内存实际存放形式四个字节的内存实际存放形式 低地址 高地址 符号位 真值为:真值为:+35510 !+35510 ! 溢出! 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 2. 2. 整数在内存中的表示整数在内存中的表示 十六进制整数十六进制整数 0X8AB6:0X8AB6: 对于对于1616位的内存单元位的内存单元: 符号位符号位( (表示负表示负) ) (+0X8AB6)(+0X8AB6)补 补 = = 0 0 1000 1010 1011 0110 1000 1010 1011 0110 (-0X8AB6)(-0X8AB6)补 补 = = 1 1 0111 0101 0100 1010 0111 0101 0100 1010 按位求反,末位加按位求反,末位加1 1 01001010 01110101 低地址 高地址 十六进制数十六进制数-0X8AB6-0X8AB6两个字节的内存实际存放形式两个字节的内存实际存放形式 低字节 高字节 符号位 表示正 取取 低低 1616 位位真值为:真值为:+30026 !+30026 ! 对于对于3232位的内存单元位的内存单元: (+0X8AB6)(+0X8AB6)补 补 = = 0 0000 000 00000000 00000000 00000000 1000 1010 1011 0110 1000 1010 1011 0110 按位求反,末位加按位求反,末位加1 1 (-0X8AB6)(-0X8AB6)补 补 = = 1 1111 111 11111111 11111111 11111111 0111 0101 0100 1010 0111 0101 0100 1010 符号位符号位( (表示负表示负) ) 01001010 01110101 11111111 11111111 低字节 高字节 十六进制数十六进制数-0X8AB6-0X8AB6四个字节的内存实际存放形式四个字节的内存实际存放形式 低地址 高地址 符号位 表示负 真值为:真值为:-35510 !-35510 ! 溢出! 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 3. 3. 整型变量整型变量 整型变量的定义整型变量的定义 intint 变量名变量名 , 变量名变量名2 2,变量名变量名nn; intint必须小写必须小写至少一个空格至少一个空格必须为合法的标识符必须为合法的标识符以逗号以逗号, ,分隔分隔以分号以分号; ;结尾结尾定义时可以赋初值,方法:在变量名后面增加定义时可以赋初值,方法:在变量名后面增加“= = 数值数值 ” 例: int a; int x, y, z; int m = 2, y = -3; 当程序中定义了一个变量时,计算机会为这个变量当程序中定义了一个变量时,计算机会为这个变量 分配一个相应大小的内存单元。因此,这个变量是有值分配一个相应大小的内存单元。因此,这个变量是有值 的,它的值就是对应内存单元的值。如果定义时没有赋的,它的值就是对应内存单元的值。如果定义时没有赋 初值,则这个值程序员是无法预知的。初值,则这个值程序员是无法预知的。 整型变量的分类整型变量的分类 修饰符修饰符 控制变量是否有符号:控制变量是否有符号:signedsigned(有符号)和(有符号)和unsignedunsigned(无符号)(无符号) 控制整型变量的值域范围控制整型变量的值域范围 :shortshort(短)和(短)和longlong(长)。(长)。 有符号基本型(有符号基本型(intint) intint a = -2; a = -2; /定义一个有符号整型变量定义一个有符号整型变量a a,并赋初值,并赋初值-2-2 占一个机器字大小的内存单元。占一个机器字大小的内存单元。TCTC或或BC3.1BC3.1下下, ,变量占变量占2 2个字节(个字节(1616 位)的内存单元;位)的内存单元;VC6.0VC6.0下,变量占下,变量占4 4个字节(个字节(3232位)的内存单元。位)的内存单元。 如果定义变量时,不指定如果定义变量时,不指定signedsigned,也不指定,也不指定unsignedunsigned ,则默认为,则默认为signedsigned(有符号)(有符号) 11111110 11111111 低地址 高地址 低字节 高字节 符号位符号位 变量变量a a占用占用 的内存单元的内存单元 (2(2字节字节) ) 有符号整型变量在内存中的实际存放形式有符号整型变量在内存中的实际存放形式( (假设在假设在BC3.1BC3.1下下) ) 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 无符号基本型(无符号基本型(unsigned unsigned intint或或unsignedunsigned) unsigned unsigned intint a = 2; a = 2; /定义一个无符号整型变量定义一个无符号整型变量a a,并赋初值,并赋初值2 2 或或 unsigned a = 2;unsigned a = 2; 占用的内存单元字节数同占用的内存单元字节数同intint类型。与类型。与intint a = 2; a = 2;等价。等价。 unsigned unsigned intint a = -2; a = -2; /定义一个无符号整型变量定义一个无符号整型变量a a,并赋初值,并赋初值-2-2 或或 unsigned a = -2;unsigned a = -2; 11111110 11111111 无符号整型变量在内存中的实际存放形式无符号整型变量在内存中的实际存放形式( (假设在假设在BC3.1BC3.1下下) ) 低字节 高字节 低地址 高地址 数据位数据位 变量变量a a占用占用 的内存单元的内存单元 (2(2字节字节) ) 其值为:其值为:65534 !65534 ! 注意:注意:对于有符号数也好还是无符号数也好,其实在计对于有符号数也好还是无符号数也好,其实在计 算机内存中表示是不加区分的,都是以其补码形式表示,只算机内存中表示是不加区分的,都是以其补码形式表示,只 是我们怎样看待最高二进制位的问题,如果把最高位当成符是我们怎样看待最高二进制位的问题,如果把最高位当成符 号位看待,则为有符号数,如果把最高位当成数据位看待,号位看待,则为有符号数,如果把最高位当成数据位看待, 则变为无符号数。则变为无符号数。 例如:例如:unsigned unsigned intint a = -2 a = -2; printf(“%dprintf(“%d” ”,a)a);-有符号输出,则为有符号输出,则为-2-2 printf(“%uprintf(“%u” ”,a)a);-无符号输出,则为无符号输出,则为6553465534 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 有符号短整型(有符号短整型(short short intint或或shortshort) short short intint a = 2; a = 2; /定义一个有符号短整型变量定义一个有符号短整型变量a a,并赋初值,并赋初值2 2 或或 short a = 2;short a = 2; 占用的内存单元为占用的内存单元为2 2个字节,无论是个字节,无论是TCTC、BCBC,还是,还是VCVC。 无符号短整型(无符号短整型(unsigned short unsigned short intint或或unsigned shortunsigned short) unsigned short unsigned short intint a = 2; a = 2; /定义一个无符号短整型变量定义一个无符号短整型变量a a,并赋初值,并赋初值2 2 或或 unsigned short a = 2;unsigned short a = 2; 占用的内存单元字节数同占用的内存单元字节数同shortshort类型。类型。 在在TC2.0TC2.0和和BC3.1BC3.1下,下,unsigned shortunsigned short类型与类型与unsigned unsigned intint类型是等价的类型是等价的 。 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 有符号长整型(有符号长整型(long long intint或或longlong) long long intint a = 234567; a = 234567; /定义一个有符号长整型变量定义一个有符号长整型变量a a,并赋初值,并赋初值234567234567 或或 long a = 234567;long a = 234567; 占用的内存单元为占用的内存单元为4 4个字节,无论是个字节,无论是TCTC、BCBC,还是,还是VCVC。 无符号长整型(无符号长整型(unsigned long unsigned long intint或或unsigned longunsigned long) unsigned long unsigned long intint a = 2; a = 2; /定义一个无符号长整型变量定义一个无符号长整型变量a a,并赋初值,并赋初值2 2 或或 unsigned long a = 2;unsigned long a = 2; 占用的内存单元字节数同占用的内存单元字节数同longlong类型。类型。 在在VCVC中中longlong与与intint类型基本相同,均占四个字节的内类型基本相同,均占四个字节的内 存单元;但在存单元;但在TCTC或或BCBC中,中,longlong类型与类型与intint类型只是所占字类型只是所占字 节不同外(节不同外(longlong占占4 4字节,字节,intint占占2 2字节),其它数据处理字节),其它数据处理 方法是一样的。方法是一样的。 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 【例例】各种整型变量的定义各种整型变量的定义 #include #define SUM 65535#define SUM 65535 void main ( )void main ( ) intint a, b = 20 a, b = 20; unsigned unsigned intint c = 0xff; c = 0xff; long D; long D; a = SUM; a = SUM; D = 301; D = 301; printf(“aprintf(“a = % = %dndn“, a)“, a); printf(“bprintf(“b = % = %dndn“, b)“, b); printf(“cprintf(“c = % = %dndn“, c)“, c); printf(“Dprintf(“D = % = %dndn”, D)”, D); /文件包含,头文件说明 /定义符号常量SUM,值为65535 /定义两个int型变量a和b,b赋初值20 /定义无符号整型变量c,并赋初值0xff /定义长整型变量D /对a赋值为SUM,这时a的值是65535 /对D赋值为301 /以有符号十进制形式(“%d“)显示a的值 /以有符号十进制形式(“%d”)显示b的值 /以有符号十进制形式(“%d“)显示c的值 /以有符号十进制形式(“%d“)显示D的值 变量定变量定 义部分义部分 语句执行部分语句执行部分 在在TC2TC2下运行结果:下运行结果: a = -1a = -1 b = 20 b = 20 c = 255 c = 255 D = 301 D = 301 在在VC6.0VC6.0下运行结果:下运行结果: a = 65535a = 65535 b = 20 b = 20 c = 255 c = 255 D = 301 D = 301 对于对于1616位的有符号整型变量位的有符号整型变量a a来来 说,因说,因6553565535在内存中的形式为在内存中的形式为 1 1111111111111111111111111111111,最高位为,最高位为1 1表示表示 负,则其所对应的十进制数就为负,则其所对应的十进制数就为-1-1。 如果如果 usignedusigned b=SUM; b=SUM; printf(“bprintf(“b=%=%u”,bu”,b);); 结果会是?结果会是? 4. 4. 整数常量的分类整数常量的分类 根据其值所在范围确定其数据类型根据其值所在范围确定其数据类型。在。在TC2.0TC2.0或或BC3.1BC3.1下,下, 如果整型常量的值位于如果整型常量的值位于-32768-327683276732767之间,之间,C C语言认为它是语言认为它是intint 型常量;如果整型常量的值位于型常量;如果整型常量的值位于-2147483648-214748364821474836472147483647之间之间 ,C C语言认为它是语言认为它是longlong型常量。型常量。 整型常量后加字母整型常量后加字母l l或或L L,认为它是,认为它是long long intint 型常量型常量。比。比 如如123L123L、45l45l、0XAFL0XAFL。 无符号数也可用后缀表示,整型常数的无符号数的后缀为无符号数也可用后缀表示,整型常数的无符号数的后缀为 U U或或u u。例如:例如:358u358u, 0x38Au0x38Au,235Lu 235Lu 均为无符号数。均为无符号数。 前缀、后缀可同时使用以表示各种类型的数。如前缀、后缀可同时使用以表示各种类型的数。如0XA5Lu0XA5Lu表示表示 十六进制无符号长整数十六进制无符号长整数A5A5,其十进制为,其十进制为165165。其实整型常数这。其实整型常数这 种表示无符号数意义不大,在机器内部它还是用其补码表示,种表示无符号数意义不大,在机器内部它还是用其补码表示, 例如例如-1U-1U和和-1-1在内存中表示是一样的在内存中表示是一样的, ,数据处理也一样数据处理也一样, ,所以有所以有 的教科书上说的教科书上说“常量无常量无unsignedunsigned类型类型”,其实有,但无意义。,其实有,但无意义。 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 语 言 程 序 设 计 第 二 章 基 本 数 据 类 型 C 5. 5. 实型数据实型数据 实型常量(实数或浮点数)实型常量(实数或浮点数) l l 十进制小数形式:十进制小数形式:由数字由数字0 09 9和小数点组成和小数点组成 . . 如如:0.0,5.6,-:0.0,5.6,- 5.5. l l指数形式:由十进制数,加阶码标志指数形式:由十进制数,加阶码标志e e或或E E以及阶码(只能为整以及阶码(只能为整 数,可以带符号)组成数,可以带符号)组成. . 其一般形式为:其一般形式为:aEnaEn 其中:其中:a a为十进制数,为十进制数,n n为十进制整数,都不可缺少。其可表为十进制整数,都不可缺少。其可表 示为示为a a1010 n n 合法的实数表示:合法的实数表示: 2.1E5 2.1E5 表示表示2.1102.110 5 5 ,3.7E-2 3.7E-2 表示表示3.7103.710-2 -2。 。 非法的实数表示:非法的实数表示: 345345( (无小数点无小数点) ,E7E7( (阶码标志阶码标志E E之前无数字之前无数字) ) , -5E-5E( (无阶码无阶码) ) ,50.-E350.-E3( (负号位置不对负号位置不对) ) 实型变量实型变量 l l 单精度实型(单精度实型(floatfloat) float f = 3.14, g;float f = 3.14, g; 这种定义的变量在内存中占这种定义的变量在内存中占4 4个字节(个字节(3232位)的存储单元。位)的存储单元。 l l双精度实型双精度实型(doubledouble) double x, y;double x, y; 这种定义的变量在内存中占这种定义的变量在内存中占8 8个字节(个字节(6464位)的存储单元。位)的存储单元。 l l长双精度实型长双精度实型(long doublelong double) long double x, y;long double x, y; 在在TCTC或或BCBC下,这种定义的变量在内存中占下,这种定义的变量在内存中占1010个字节(个字节(8080位)位) 的存储单元;在的存储单元;在VCVC下则占下则占8 8个字节(个字节(6464位)。位)。 注意:注意: 三种实数类型中,其精度是三种实数类型中,其精度是 float void main ( )void main ( ) float a; float a; /定义定义floatfloat型变量型变量a a double b, c; double b, c; /定义定义doubledouble型变量型变量b b和和c c a = 123.456789; a = 123.456789; /对变量对变量a a赋值为赋值为123.456789123.456789 b = a; b = a; /将变量将变量a a赋给变量赋给变量b b c = 123.456789; c = 123.456789; /对变量对变量c c赋值为赋值为123.456789123.456789 printf(“aprintf(“a = %f b = %lf c = %lfn“, a, b, = %f b = %lf c = %lfn“, a, b, c);c); a b c 123.456787 123.456787 123.456789 a = 123.456787 b = 123.456787 c = 123.456789a = 123.456787 b = 123.456787 c = 123.456789 floatfloat型变量最多只能精确表型变量最多只能精确表 示示8 8个数字,因此显示个数字,因此显示a a的值时,的值

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论