ETemp第02章基本数据类型、运算符与表达式.ppt
第第第第2 2 2 2章章章章 基本数据类型、基本数据类型、基本数据类型、基本数据类型、运算符与表达式运算符与表达式运算符与表达式运算符与表达式下一讲下一讲前一讲课堂练习前一讲课堂练习1.一个一个C程序的执行是从程序的执行是从_。A)本程序的本程序的main函数开始,到函数开始,到main函数结束函数结束B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C)本程序的本程序的main函数开始,到本程序文件的最后一个函数结束函数开始,到本程序文件的最后一个函数结束D)本程序文件的第一个函数开始,到本程序本程序文件的第一个函数开始,到本程序main函数结束函数结束2.2.源程序源程序源程序源程序program.cprogram.c经编译产生的目标文件和连接后产生的可执行文件是经编译产生的目标文件和连接后产生的可执行文件是经编译产生的目标文件和连接后产生的可执行文件是经编译产生的目标文件和连接后产生的可执行文件是_。A)program.bakA)program.bak和和和和program.obj B)program.objprogram.obj B)program.obj和和和和progam.exeprogam.exeC)program.extC)program.ext和和和和program.c D)program.bak program.c D)program.bak 和和和和program.exeprogram.exe3.TurboC3.TurboC中完成一次编译和连接的快捷方式是中完成一次编译和连接的快捷方式是中完成一次编译和连接的快捷方式是中完成一次编译和连接的快捷方式是_。A)Alt+F9 B)Ctrl+F9A)Alt+F9 B)Ctrl+F9C)F9 D)Alt+F5C)F9 D)Alt+F5ABC第第2 2章:基本数据类型、运算符与表达式章:基本数据类型、运算符与表达式u学习的意义学习的意义 学习学习学习学习C C C C语言的目的是什么?语言的目的是什么?语言的目的是什么?语言的目的是什么?目的可能是为了:目的可能是为了:目的可能是为了:目的可能是为了:期末考试期末考试期末考试期末考试 等级考试等级考试等级考试等级考试 研究生考试研究生考试研究生考试研究生考试 程序员考试程序员考试程序员考试程序员考试 语语言言程程序序设设计计 第第二二章章 基基本本数数据据类类型型C最终目的是:最终目的是:最终目的是:最终目的是:用用用用C C C C语言编写语言编写语言编写语言编写程序程序程序程序来解决实际问题!来解决实际问题!来解决实际问题!来解决实际问题!程 序是什么?程序是解决某种问题的一组指令的有序集合。程序是解决某种问题的一组指令的有序集合。程序是解决某种问题的一组指令的有序集合。程序是解决某种问题的一组指令的有序集合。著名计算机科学家沃思(著名计算机科学家沃思(著名计算机科学家沃思(著名计算机科学家沃思(Nikiklaus WirthNikiklaus WirthNikiklaus WirthNikiklaus Wirth)提)提)提)提出一个公式:出一个公式:出一个公式:出一个公式:程序程序程序程序=数据结构数据结构数据结构数据结构+算法算法算法算法 u学习的意义学习的意义 程序是什么?程序是什么?对数据的描述。对数据的描述。对数据的描述。对数据的描述。在在在在C C C C语言中,体语言中,体语言中,体语言中,体现为现为现为现为数据类型数据类型数据类型数据类型的的的的描述!描述!描述!描述!对数据处理的描述。对数据处理的描述。对数据处理的描述。对数据处理的描述。是为解决一个问题而是为解决一个问题而是为解决一个问题而是为解决一个问题而采取的方法和步骤,采取的方法和步骤,采取的方法和步骤,采取的方法和步骤,是程序的灵魂!是程序的灵魂!是程序的灵魂!是程序的灵魂!结论:学好结论:学好C C语言首先语言首先就必须十分了解就必须十分了解C C语言语言的数据类型、与算符的数据类型、与算符与表达式。与表达式。语语言言程程序序设设计计 第第二二章章 基基本本数数据据类类型型C掌握变量和常量的概念;掌握变量和常量的概念;掌握变量和常量的概念;掌握变量和常量的概念;理解各种类型的数据在内存中的存放形式;理解各种类型的数据在内存中的存放形式;理解各种类型的数据在内存中的存放形式;理解各种类型的数据在内存中的存放形式;掌握各种类型数据的常量的使用方法;掌握各种类型数据的常量的使用方法;掌握各种类型数据的常量的使用方法;掌握各种类型数据的常量的使用方法;掌握各种整型、字符型、浮点型变量的定义和引掌握各种整型、字符型、浮点型变量的定义和引掌握各种整型、字符型、浮点型变量的定义和引掌握各种整型、字符型、浮点型变量的定义和引用方法;用方法;用方法;用方法;了解调用了解调用了解调用了解调用printfprintfprintfprintf函数输出各种类型数据的方法;函数输出各种类型数据的方法;函数输出各种类型数据的方法;函数输出各种类型数据的方法;掌握数据类型转换的规则以及强制数据类型转换掌握数据类型转换的规则以及强制数据类型转换掌握数据类型转换的规则以及强制数据类型转换掌握数据类型转换的规则以及强制数据类型转换的方法;的方法;的方法;的方法;掌握赋值运算符、算术运算符、位运算符、逗号掌握赋值运算符、算术运算符、位运算符、逗号掌握赋值运算符、算术运算符、位运算符、逗号掌握赋值运算符、算术运算符、位运算符、逗号运算符以及运算符以及运算符以及运算符以及sizeofsizeofsizeofsizeof的使用方法;的使用方法;的使用方法;的使用方法;理解运算符的优先级和结合性的概念,记住所学理解运算符的优先级和结合性的概念,记住所学理解运算符的优先级和结合性的概念,记住所学理解运算符的优先级和结合性的概念,记住所学的各种运算符的优先级关系和结合性。的各种运算符的优先级关系和结合性。的各种运算符的优先级关系和结合性。的各种运算符的优先级关系和结合性。u学习目标学习目标 语语言言程程序序设设计计 第第二二章章 基基本本数数据据类类型型C C C语言数据类型语言数据类型C 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 1A的的ASCII码值码值65E的的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)226.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 1S M E31 30.8 7 0其中其中S表示数值的正负号,表示数值的正负号,0表示正,表示正,1表示负。表示负。M表示规格化的数值表示规格化的数值,即首位小数不为即首位小数不为0。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 12.2 常量、变量和标识符常量、变量和标识符1.1.标识符标识符 定义:定义:定义:定义:用来标识变量、常量、函数等的字符序列用来标识变量、常量、函数等的字符序列用来标识变量、常量、函数等的字符序列用来标识变量、常量、函数等的字符序列 组成组成组成组成:只能由只能由只能由只能由字母字母字母字母、数字数字数字数字、下划线下划线下划线下划线组成,且第一个字母必须是字母或组成,且第一个字母必须是字母或组成,且第一个字母必须是字母或组成,且第一个字母必须是字母或下划线下划线下划线下划线C C C C语言的关键字不能用作变量名语言的关键字不能用作变量名语言的关键字不能用作变量名语言的关键字不能用作变量名 大小写敏感大小写敏感大小写敏感大小写敏感 长度长度长度长度:有效长度为:有效长度为:有效长度为:有效长度为32323232个字符。随系统而异,但至少前个字符。随系统而异,但至少前个字符。随系统而异,但至少前个字符。随系统而异,但至少前8 8 8 8个字符有效个字符有效个字符有效个字符有效 命名原则:命名原则:命名原则:命名原则:变量名和函数名中的英文字母一般用小写,以增加可读性变量名和函数名中的英文字母一般用小写,以增加可读性变量名和函数名中的英文字母一般用小写,以增加可读性变量名和函数名中的英文字母一般用小写,以增加可读性 见名知意见名知意见名知意见名知意不宜混淆不宜混淆不宜混淆不宜混淆 如如如如l l l l与与与与I,oI,oI,oI,o与与与与0 0 0 0语语言言程程序序设设计计 第第二二章章 基基本本数数据据类类型型C 在在在在TC2.0TC2.0TC2.0TC2.0及及及及BC3.1BC3.1BC3.1BC3.1中,变量名(标中,变量名(标中,变量名(标中,变量名(标识符)的有效长度为个字符,识符)的有效长度为个字符,识符)的有效长度为个字符,识符)的有效长度为个字符,缺省值为,但在缺省值为,但在缺省值为,但在缺省值为,但在VCVCVCVC中其长度可达中其长度可达中其长度可达中其长度可达到到到到255 255 255 255 例:判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name#33 lotus_1_2_3 char ab _above$1233days#33char$123ab .字符非法字符非法字符非法字符非法 数字数字数字数字3 3 3 3不可作首字符不可作首字符不可作首字符不可作首字符#字符非法字符非法字符非法字符非法 charcharcharchar是关键字是关键字是关键字是关键字 字符非法字符非法字符非法字符非法$不可作首字符不可作首字符不可作首字符不可作首字符2.2 常量、变量和标识符常量、变量和标识符2.2.常量常量 定义:定义:定义:定义:程序运行时其值不能改变的量(即常数)程序运行时其值不能改变的量(即常数)程序运行时其值不能改变的量(即常数)程序运行时其值不能改变的量(即常数)常量的分类常量的分类常量的分类常量的分类 :直接常量直接常量直接常量直接常量(值常量或称为字面产量值常量或称为字面产量值常量或称为字面产量值常量或称为字面产量)整型常量整型常量整型常量整型常量:10101010、15151515、-10-10-10-10、-30-30-30-30 实型常量:实型常量:实型常量:实型常量:12.512.512.512.5、30.030.030.030.0、-1.5-1.5-1.5-1.5 字符常量字符常量字符常量字符常量:AAAA、bbbb、cccc 字符串常量字符串常量字符串常量字符串常量:“sum”“sum”“sum”“sum”、“A”A”A”A”、“123”123”123”123”符号常量符号常量符号常量符号常量 用标识符来代表常量。用标识符来代表常量。用标识符来代表常量。用标识符来代表常量。其定义格式为:其定义格式为:其定义格式为:其定义格式为:语语言言程程序序设设计计 第第二二章章 基基本本数数据据类类型型C#define define define define 符号常量符号常量符号常量符号常量 常量常量常量常量#define NUM 20#define PI 3.1415926#include#include#define PRICE 30#define PRICE 30void main()void main()int num,total;int num,total;num=10;num=10;total=num*total=num*PRICEPRICE;printf(total=%d,total);printf(total=%d,total);运行结果:运行结果:total=300#开头的语句行尾不能有分号开头的语句行尾不能有分号开头的语句行尾不能有分号开头的语句行尾不能有分号 definedefinedefinedefine前面一定要有前面一定要有前面一定要有前面一定要有#符号常量名最好使用大写符号常量名最好使用大写符号常量名最好使用大写符号常量名最好使用大写 符号常量名最好有意义符号常量名最好有意义符号常量名最好有意义符号常量名最好有意义 2.2 常量、变量和标识符常量、变量和标识符3.3.变量变量 定义:定义:定义:定义:程序运行时其值可以被改变的量程序运行时其值可以被改变的量程序运行时其值可以被改变的量程序运行时其值可以被改变的量 变量的两要素变量的两要素变量的两要素变量的两要素 :变量名变量名变量名变量名 、变量值、变量值、变量值、变量值 变量的定义格式变量的定义格式变量的定义格式变量的定义格式 :变量的初始化:变量的初始化:变量的初始化:变量的初始化:定义时赋初始值定义时赋初始值定义时赋初始值定义时赋初始值 变量的使用:变量的使用:变量的使用:变量的使用:先定义,后赋值先定义,后赋值先定义,后赋值先定义,后赋值 变量定义位置:变量定义位置:变量定义位置:变量定义位置:一般一般一般一般放在函数开头放在函数开头放在函数开头放在函数开头语语言言程程序序设设计计 第第二二章章 基基本本数数据据类类型型C 存储类型存储类型存储类型存储类型 数据类型数据类型数据类型数据类型 变量名变量名变量名变量名1111,变量名,变量名,变量名,变量名2 2 2 2,变量名,变量名,变量名,变量名nnnn;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;abc2字节2字节2字节地址地址内存.1-3随机数例1:int student;stadent=19;/Undefined symbol statent 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 简单数据类型与表示范围简单数据类型与表示范围语语言言程程序序设设计计 第第二二章章 基基本本数数据据类类型型C1.整型数据整型数据 整型常量整型常量整型常量整型常量 l l 十进制整数:十进制整数:十进制整数:十进制整数:由数字由数字由数字由数字0 0 0 09 9 9 9和正负号表示和正负号表示和正负号表示和正负号表示.如如如如:123,-456,0:123,-456,0:123,-456,0:123,-456,0l l八进制整数:由数字八进制整数:由数字八进制整数:由数字八进制整数:由数字0 0 0 0开头,后跟数字开头,后跟数字开头,后跟数字开头,后跟数字0 0 0 07 7 7 7表示表示表示表示.如如如如:0123,011:0123,011:0123,011:0123,011l l十六进制整数:由十六进制整数:由十六进制整数:由十六进制整数:由0 x0 x0 x0 x或或或或0X0X0X0X开头开头开头开头,后跟后跟后跟后跟0 0 0 09,a9,a9,a9,af,Af,Af,Af,AF F F F表示表示表示表示.如如如如0 x123,0Xff 0 x123,0Xff 0 x123,0Xff 0 x123,0Xff 定义整数的符号常量定义整数的符号常量#define NUM1 20 /#define NUM1 20 /十进制数十进制数2020#define NUM2 020 /#define NUM2 020 /八进制数(十进制八进制数(十进制1616)#define NUM3 0 x2a /#define NUM3 0 x2a /十六进制数(十进制十六进制数(十进制4242)思考题:下列整型常量哪些是非法的?思考题:下列整型常量哪些是非法的?012 012,oX7AoX7A,0000,078078,0 x5Ac0 x5Ac,-0 xFFFF-0 xFFFF,00340034,7B7B。首字符不能首字符不能是字母是字母o o 八进制数中不八进制数中不能有数字能有数字8 8 十进制数中不十进制数中不能有字母能有字母B B 语语言言程程序序设设计计 第第二二章章 基基本本数数据据类类型型C2.整数在内存中的表示整数在内存中的表示 整数的数值在内存中用补码的形式存放。整数的数值在内存中用补码的形式存放。整数的数值在内存中用补码的形式存放。整数的数值在内存中用补码的形式存放。求一个整数补码的方法:求一个整数补码的方法:求一个整数补码的方法:求一个整数补码的方法:(假设用(假设用(假设用(假设用n n n n个二进制位的内存单个二进制位的内存单个二进制位的内存单个二进制位的内存单元来存储它)元来存储它)元来存储它)元来存储它)如果是正整数如果是正整数如果是正整数如果是正整数,采用符号,采用符号,采用符号,采用符号-绝对值表示,即最高有效位绝对值表示,即最高有效位绝对值表示,即最高有效位绝对值表示,即最高有效位(符号位)为(符号位)为(符号位)为(符号位)为0 0 0 0表示正,数的其余部分则表示数的绝对值;表示正,数的其余部分则表示数的绝对值;表示正,数的其余部分则表示数的绝对值;表示正,数的其余部分则表示数的绝对值;如果是负整数如果是负整数如果是负整数如果是负整数,则先写出与该负数相对应的正数的补码,则先写出与该负数相对应的正数的补码,则先写出与该负数相对应的正数的补码,则先写出与该负数相对应的正数的补码表示,然后将其按位求反,最后在末位(最低位)加表示,然后将其按位求反,最后在末位(最低位)加表示,然后将其按位求反,最后在末位(最低位)加表示,然后将其按位求反,最后在末位(最低位)加1 1 1 1;然后将上述求得的补码的低然后将上述求得的补码的低然后将上述求得的补码的低然后将上述求得的补码的低n n n n位存放于内存单元之中,就位存放于内存单元之中,就位存放于内存单元之中,就位存放于内存单元之中,就得到了该整数在内存中的表示,内存单元的最高位是符号得到了该整数在内存中的表示,内存单元的最高位是符号得到了该整数在内存中的表示,内存单元的最高位是符号得到了该整数在内存中的表示,内存单元的最高位是符号位(位(位(位(0 0 0 0表示正,表示正,表示正,表示正,1 1 1 1表示负)。表示负)。表示负)。表示负)。在在在在TC2.0TC2.0TC2.0TC2.0或或或或BC3.1BC3.1BC3.1BC3.1下,一个整数默认情况下需要下,一个整数默认情况下需要下,一个整数默认情况下需要下,一个整数默认情况下需要2 2 2 2个字节(个字节(个字节(个字节(16161616位)的内存单元存放;而在位)的内存单元存放;而在位)的内存单元存放;而在位)的内存单元存放;而在VC6.0VC6.0VC6.0VC6.0下下下下,则则则则需要需要需要需要4 4 4 4个字节(个字节(个字节(个字节(32323232位)。位)。位)。位)。语语言言程程序序设设计计 第第二二章章 基基本本数数据据类类型型C2.整数在内存中的表示整数在内存中的表示十进制整数十进制整数十进制整数十进制整数 13:13:对于对于对于对于16161616位的内存单元位的内存单元位的内存单元位的内存单元:符号位符号位符号位符号位(表示正表示正表示正表示正)00001101000011010 000000000000000低字节低字节高字节高字节低地址低地址高地址高地址符号位符号位十进制数十进制数+13+13两个字节的内存实际存放形式两个字节的内存实际存放形式(+13)(+13)补补补补=0 0000 0000 0000 1101000 0000 0000 1101 语语言言程程序序设设计计 第第二二章章 基基本本数数据据类类型型C2.整数在内存中的表示整数在内存中的表示十进制整数十进制整数十进制整数十进制整数 13:13:对于对于对于对于32323232位的内存单元位的内存单元位的内存单元位的内存单元:符号位符号位符号位符号位(表示正表示正表示正表示正)低字节低字节高字节高字节低地址低地址高地址高地址十进制数十进制数+13+13四个字节的内存实际存放形式四个字节的内存实际存放形式(+13)(+13)补补补补=0 0000 0000 0000 0000 0000 0000 0000 1101000 0000 0000 0000 0000 0000 0000 1101 0000110100001101000000000000000000000000000000000 000000000000000符号位符号位记住:记住:记住:记住:数据在内存中的存放位置是高位数字放在高地址数据在内存中的存放位置是高位数字放在高地址的存储单元中,低位数字放在低地址的存储单元中的存储单元中,低位数字放在低地址的存储单元中。语语言言程程序序设设计计 第第二二章章 基基本本数数据据类类型型C2.整数在内存中的表示整数在内存中的表示十进制整数十进制整数十进制整数十进制整数 13:13:对于对于对于对于16161616位的内存单元位的内存单元位的内存单元位的内存单元:符号位符号位符号位符号位(表示负表示负表示负表示负)11110011111100111 111111111111111低字节低字节高字节高字节低地址低地址高地址高地址符号位符号位十进制数十进制数-13-13两个字节的内存实际存放形式两个字节的内存实际存放形式(+13)(+13)补补补补=0 0000 0000 0000 1101000 0000 0000 1101(-13)(-13)补补补补=1 1111 1111 1111 0011111 1111 1111 0011 按位求反,末位加按位求反,末位加按位求反,末位加按位求反,末位加1 1 1 1 语语言言程程序序设设计计 第第二二章章 基基本本数数据据类类型型C2.整数在内存中的表示整数在内存中的表示十进制整数十进制整数十进制整数十进制整数 13:13:对于对于对于对于32323232位的内存单元位的内存单元位的内存单元位的内存单元:符号位符号位符号位符号位(表示负表示负表示负表示负)低字节低字节高字节高字节低地址低地址高地址高地址十进制数十进制数-13-13四个字节的内存实际存放形式四个字节的内存实际存放形式(+13)(+13)补补补补=0 0000 0000 0000 0000 0000 0000 0000 1101000 0000 0000 0000 0000 0000 0000 1101 1111001111110011111111111111111111111111111111111 111111111111111符号位符号位(-13)(-13)补补补补=1 1111 1111 1111 1111 1111 1111 1111 0011111 1111 1111 1111 1111 1111 1111 0011 按位求反,末位加按位求反,末位加按位求反,末位加按位求反,末位加1 1 1 1 语语言言程程序序设设计计 第第二二章章 基基本本数数据据类类型型C2.整数在内存中的表示整数在内存中的表示十进制整数十进制整数十进制整数十进制整数 65537:65537:对于对于对于对于16161616位的内存单元位的内存单元位的内存单元位的内存单元:符号位符号位符号位符号位(表示负表示负表示负表示负)(+65537)(+65537)补补补补=0 01 0000 0000 0000 00011 0000 0000 0000 0001(-65537)(-65537)补补补补=1 10 1111 1111 1111 11110 1111 1111 1111 1111 按位求反,末位加按位求反,末位加按位求反,末位加按位求反,末位加1 1 1 1 11111111111111111 111111111111111低地址低地址高地址高地址十进制数十进制数-65537-65537两个字节的内存实际存放形式两个字节的内存实际存放形式 低字节低字节高字节高字节符号位符号位取取取取低低低低16161616位位位位真值为:真值为:真值为:真值为:-1,-1,-1,-1,不是不是不是不是-65537!-65537!-65537!-65537!溢出!溢出!溢出!溢出!语语言言程程序序设设计计 第第二二章章 基基本本数数据据类类型型C2.整数在内存中的表示整数在内存中的表示十进制整数十进制整数十进制整数十进制整数 65537:65537:对于对于对于对于32323232位的内存单元位的内存单元位的内存单元位的内存单元:符号位符号位符号位符号位(表示负表示负表示负表示负)低字节低字节高字节高字节低地址低地址高地址高地址十进制数十进制数-65537-65537四个字节的内存实际存放形式四个字节的内存实际存放形式(+65537)(+65537)补补补补=0 0000 0000 0000 0001 0000 0000 0000 0001000 0000 0000 0001 0000 0000 0000 0001 1111111111111111111111111111111111111110111111101 111111111111111符号位,符号位,表示负表示负(-65537)(-65537)补补补补=1 1111 1111 1111 1110 1111 1111 1111 1111111 1111 1111 1110 1111 1111 1111 1111 按位求反,末位加按位求反,末位加按位求反,末位加按位求反,末位加1 1 1 1 真值为:真值为:真值为:真值为:-65537!-65537!-65537!-65537!为什么为什么为什么为什么-65537-65537-65537-65537这个数在这个数在这个数在这个数在16161616位内存单元中的表示与在位内存单元中的表示与在位内存单元中的表示与在位内存单元中的表示与在32323232位位位位内存单元中的表示不相同呢?内存单元中的表示不相同呢?内存单元中的表示不相同呢?内存单元中的表示不相同呢?这主要是因为这主要是因为这主要是因为这主要是因为-65537-65537-65537-65537这个数超出了这个数超出了这个数超出了这个数超出了16161616位内存单元表示数位内存单元表示数位内存单元表示数位内存单元表示数的范围的范围的范围的范围,所以实际存储的值(,所以实际存储的值(,所以实际存储的值(,所以实际存储的值(-1-1-1-1)与要表示的值()与要表示的值()与要表示的值()与要表示的值(-65537655376553765537)不同,但)不同,但)不同,但)不同,但-6553765537并没有超出了并没有超出了并没有超出了并没有超出了32323232位内存单元表示数位内存单元表示数位内存单元表示数位内存单元表示数的范围,所以实际存储的值就是其本身。因此,我们在的范围,所以实际存储的值就是其本身。因此,我们在的范围,所以实际存储的值就是其本身。因此,我们在的范围,所以实际存储的值就是其本身。因此,我们在C C C C语语语语言中对数据处理时必须要注意数据的表示范围,以免引起言中对数据处理时必须要注意数据的表示范围,以免引起言中对数据处理时必须要注意数据的表示范围,以免引起言中对数据处理时必须要注意数据的表示范围,以免引起不必要的错误不必要的错误不必要的错误不必要的错误。语语言言程程序序设设计计 第第二二章章 基基本本数数据据类类型型C2.整数在内存中的表示整数在内存中的表示八进制整数八进制整数八进制整数八进制整数 034:034:对于对于对于对于16161616位的内存单元位的内存单元位的内存单元位的内存单元:034=(011 100)034=(011 100)034=(011 100)034=(011 100)2 2 2 2符号位符号位符号位符号位(表示正表示正表示正表示正)00011100000111000 000000000000000低字节低字节高字节高字节低地址低地址高地址高地址符号位符号位八进制数八进制数034034两个字节的内存实际存放形式两个字节的内存实际存放形式(034)(034)补补补补=0 0000 0000 0001 1100000 0000 0001 1100 对于对于对于对于32323232位的内存单元位的内存单元位的内存单元位的内存单元:(034)(034)补补补补=0 0000 0000 0000 0000 0000 0000 0001 1100000 0000 0000 0000 0000 0000 0001 1100符号位符号位符号位符号位(表示正表示正表示正表示正)低字节低字节高字节高字节低地址低地址高地址高地址八进制数八进制数034034四个字节的内存实际存放形式四个字节的内存实际存放形式 0001110000011100000000000000000000000000000000000 000000000000000符号位符号位语语言言程程序序设设计计 第第二二章章 基基本本数数据据类类型型C2.整数在内存中的表示整数在内存中的表示八进制整数八进制整数八进制整数八进制整数 034:034:对于对于对于对于16161616位的内存单元位的内存单元位的内存单元位的内存单元:符号位符号位符号位符号位(表示负表示负表示负表示负)11100100111001001 111111111111111低字节低字节高字节高字节低地址低地址高地址高地址符号位符号位八进制数八进制数-034-034两个字节的内存实际存放形式两个字节的内存实际存放形式(+034)(+034)补补补补=0 0000 0000 0001 1100000 0000 0001 1100(-034)(-034)补补补补=1 1111 1111 1110 0100111 1111 1110 0100 按位求反,末位加按位求反,末位加按位求反,末位加按位求反,末位加1 1 1 1 对于对于对于对于32323232位的内存单元位的内存单元位的内存单元位的内存单元:(+034)(+034)补补补补=0 0000 0000 0000 0000 0000 0000 0001 1100000 0000 0000 0000 0000 0000 0001 1100 按位求反,末位加按位求反,末位加按位求反,末位加按位求反,末位加1 1 1 1(-034)(-034)补补补补=1 1111 1111 1111 1111 1111 1111 1110 0100111 1111 1111 1111 1111 1111 1110 0100符号位符号位符号位符号位(表示负表示负表示负表示负)1110010011100100111111111111111111111111111111111 111111111111111低字节低字节高字节高字节低地址低地址高地址高地址八进制数八进制数-034-034四个字节的内存实际存放形式四个字节的内存实际存放形式 符号位符号位语语言言程程序序设设计计 第第二二章章 基基本本数数据据类类型型C2.整数在内存中的表示整数在内存中的表示十六进制整数十六进制整数十六进制整数十六进制整数 0X8AB6:0X8AB6:对于对于对于对于16161616位的内存单元位的内存单元位的内存单元位的内存单元:0X8AB6=(1000 1010 1011 0110)0X8AB6=(1000 1010 1011 0110)0X8AB6=(1000 1010 1011 0110)0X8AB6=(1000 1010 1011 0110)2 2 2 2符号位符号位符号位符号位(表示正表示正表示正表示正)10110110101101101 100010100001010低字节低字节高字节高字节低地址低地址高地址高地址符号位符号位表示负表示负十六进制数十六进制数0X8AB60X8AB6两个字节的内存实际存放形式两个字节的内存实际存放形式(0X8AB6)(0X8AB6)补补补补=0 0 1000 1010 1011 01101000 1010 1011 0110 取取取取低低低低16161616位位位位真值为:真值为:真值为:真值为:-30026!-30026!-30026!-30026!对于对于对于对于32323232位的内存单元位的内存单元位的内存单元位的内存单元:(0X8AB6)(0X8AB6)补补补补=0 0000 0000 0000 0000 1000 1010 1011 0110000 0000 0000 0000 1000 1010 1011 0110符号位符号位符号位符号位(表示正表示正表示正表示正)1011011010110110100010101000101000000000000000000 000000000000000低字节低字节高字节高字节十六进制数十六进制数0X8AB60X8AB6四个字节的内存实际存放形式四个字节的内存实际