欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第2章 基本数据类型及运算符原始精选文档.ppt

    • 资源ID:47501302       资源大小:1.62MB        全文页数:40页
    • 资源格式: PPT        下载积分:18金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要18金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第2章 基本数据类型及运算符原始精选文档.ppt

    第2章 基本数据类型及运算符原始本讲稿第一页,共四十页C语言标识符 计算机程序处理的对象是数据,编写程序也就是描述对数据的处理过程。在程序中通过名字建立定义与使用的关系。为了这种需要,每种程序语言都规定了在程序里如何描述名字,程序语言的名字通常被称为“标识符”。直接地说,标识符就是一个名字,像后面介绍的符号常量名、变量名、函数名、标号、数组名、文件名、结构类型名和其他各种用户定义的对象名都是标识符,它们的命名必须满足标识符的构成规则。C语言中允许用作标识符的字符有:u26个英文字母,包括大小写(共52个)u数字0,l,9u下划线标识符的构成规则为:u必须由字母(az,AZ)或下划线(_)开头u后面可以跟随任意的字母、数字或下划线本讲稿第二页,共四十页 在C语言中,大小写字母有不同的含义,例如:num,Num,NUM为三个不同的标识符。在构造标识符时,应注意做到“见名知意”,即选择有含义的英文单词(或汉语拼音)作标识符,以增加程序的可读性。如表示年可以用year,表示长度可用length,表示和可以用sum等。C语言中有一些标识符被称为关键字,在系统中具有特殊用途,不能作为一般标识符使用,如用于整型变量定义的int关键字,就不能再用作变量名。有些标识符虽不是关键字,但C语言总是以固定的形式用于专门的地方,因此,用户也不要把它们当做一般标识符使用,以免造成混乱。这些常用的标识符有:define,include,ifdef,ifndef,endif,elif。本讲稿第三页,共四十页例如,以下均是合法的标识符:sum,a1,i,j5k3,sum_avg以下均是不合法的标识符:5i/*错在以数字开头*/u.s/*错在出现“.”*/good bay/*错在中间有空格*/在所有合法C标识符中有一个特殊的小集合,其中的标识符称为C语言的“关键字”。作为关键字的每个标识符在C程序中都有语言里预先定义好的特殊意义;这些关键字不能用于任何其他目的,例如,不能用关键字为程序中自己的东西命名。C语言的关键字总共有32个,下面列出了全部关键字。autobreakcasecharconst continuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedef unionunsignedvoidvolatilewhile本讲稿第四页,共四十页基本数据类型 C C语言有五种基本数据类型:字符、整型、单精度实型、双精度实语言有五种基本数据类型:字符、整型、单精度实型、双精度实型和空类型。尽管这几种类型数据的长度和范围随处理器的类型和型和空类型。尽管这几种类型数据的长度和范围随处理器的类型和C C语语言编译程序的实现而异,但以言编译程序的实现而异,但以bitbit为例,整数与为例,整数与CPUCPU字长相等,一个字字长相等,一个字符通常为一个字节,浮点值的确切格式则根据实现而定。对于多数符通常为一个字节,浮点值的确切格式则根据实现而定。对于多数3232位的计算机,表位的计算机,表2-12-1给出了五种数据的长度和范围。给出了五种数据的长度和范围。类型长度(bit)范围char(字符型)80255int(整型)32-2 147 483 6482 147 483 647Float(单精度型)32约精确到6位数double(双精度型)64约精确到12位数void(空值型)0无值本讲稿第五页,共四十页 除除voidvoid类型外,基本类型的前面可以有各种修饰符。修饰符用来改变类型外,基本类型的前面可以有各种修饰符。修饰符用来改变基本类型的意义,以便更准确地适应各种情况的需求。修饰符如下:基本类型的意义,以便更准确地适应各种情况的需求。修饰符如下:signedsigned(有符号)(有符号)unsignedunsigned(无符号)(无符号)longlong(长型符)(长型符)shortshort(短型符)(短型符)shortshort只能修饰只能修饰intint,且,且short intshort int可省略为可省略为shortshort。longlong只能修饰只能修饰intint和和doubledouble,修饰为,修饰为long intlong int时,可省略为时,可省略为longlong。unsignedunsigned和和signedsigned只能修饰只能修饰charchar和和intint,一般情况下,一般情况下,charchar和和intint默认默认为为signedsigned型。实型数型。实型数floatfloat和和doubledouble总是有符号的,不能用总是有符号的,不能用unsignedunsigned修修饰。饰。本讲稿第六页,共四十页常量 在程序运行中,其值不能被改变的量称之为常量。在基本数据类型中常量分为整型常量、实型常量、符号常量和字符型常量(含字符常量和字符串常量)。本讲稿第七页,共四十页1.1.整型常量整型常量整型常量即为整型常数,可用十进制、八进制和十六进制3种形式表示。*十进制整型常量由0至9的数字组成,没有前缀,不能以0开始,没有小数部分。如:-123,0,456等。*八进制整型常量以0为前缀,其后由0到7的数字组成,没有小数部分。如:0123(等于十进制数的83),047(等于十进制数的39)。*十六进制整型常量以0 x或0X为前缀,其后由0到9的数字和A到F(大小写均可)的字母组成,没有小数部分。如:0 x123(等于十进制数的291),0X7A(等于十进制数的122)。整型常量中的长整型数据可用L(或小写字母l)作后缀来表示。如:1234L,5678l等。整型常量中的无符号型数据可用 U(或u)作后缀来表示。如:1234U,5678u等。如果一个整型常量的后缀是U(或u)和 L(或l),或者是L和U,都表示为unsigned long类型的常量。如:12345UL,67890ul等。本讲稿第八页,共四十页2.实型(浮点型)常量 实型常量是由整数部分和小数部分组成的,它只有十进制的两种表示形式。(1)定点数形式。它由数字和小数点组成。整数和小数部分可以省去一个,但不可两者都省,而且小数点不能省。如:1.234,.123,123.,0.0等。(2)指数形式(或称科学表示法)。它是在定点数形式表示法后加e(或E)和数字来表示指数。指数部分可正可负,但须为整数,且应注意字母e(或E)之前必须有数字。如:1.234e3,12.34e2均合法地代表了1.234103;而e3,1e2.3,.e3,e均不合法。另外,实型常量的后缀用F(或f)表示单精度型,而后缀用L(或l)表示长双精度型。如:0.5e2f表示单精度数,3.6e5L表示长双精度数。本讲稿第九页,共四十页3.符号常量 在程序中,可以定义一个符号来代表一个常量,这种相应的符号称为符号常量。例如,用PI代表圆周率,即3.1415926。使用符号常量有许多好处。一是增加可读性。在程序中出现具有一定意义的符号常量时,一看便能帮助读者了解其含义,即见名知义。如:PI代表,NAME代表姓名等。二是提高了可维护性。使用符号常量可使修改该常量变得更加方便。例如:在程序中直接使用某个常量,且该常量在程序中多处出现,若需修改该常量时,则需在每处出现该常量的地方都要加以修改,容易漏改或改错。如果使用符号常量,则只要修改其定义处即可,即一改全改。如:程序中出现某职工的姓名,且多处需要用此姓名,若用NAME符号常量代表姓名,一旦需要改变姓名,只要修改NAME的定义处即可。本讲稿第十页,共四十页 在C语言中,是用预编译处理命令#define来定义符号常量。如:#define PI 3.1415926#define NAME 姚木兰 这种语句的格式是在#define后面跟一个标识符和一串字符,彼此之间用空格隔开。由于它不是C语句,故语句末不用分号(;)。当程序被编译时,它先被编译预处理。即预处理遇到#define时,就用标识符后的字符串替换程序中的所有该标识符。习惯上,符号常量标识符用大写字母写出,以示与变量名区别。另外,符号常量标识符一旦定义,就不能在其他地方给该标识符再赋值。如:PI=3.14;是错误的。本讲稿第十一页,共四十页 字符型常量包含字符常量和字符串常量两类。1.字符常量 用一对单引号括起来的一个字符称为字符常量。例如:a、A、3、?等。它的实际含义是该字符在内存中的编码值,常用的是以ASCII编码来表示字符,如:a的编码值是97,A的编码值是65,3的编码值是51而不是数值3。除了以上形式的字符常量外,C还允许使用一种特殊形式的字符常量,即以反斜杠符()开头,后跟字符的字符序列,称之为转义字符常量,用它来表示控制及不可见的字符(见表2-2),它同样表示的是该转义字符的ASCII码值,如n表示换行,其ASCII码值为10,a表示响铃,其ASCII码值为7等。本讲稿第十二页,共四十页转义字符意义ASCII码a响铃0 x07n换行0 x0at横向跳格0 x09v竖向跳格0 x0bb退格(Backspace)0 x08r回车0 x0df换页(走纸)0 x0c0空字符0 x00反斜杠0 x5c单引号0 x27双引号0 x22ddd13位八进制数所代表的字符对应字符的ASCII 转义字符ddd(为八进制数字,07之一)将字符的ASCII码值转换为对应的字符,它表示任一个字符。例如,101表示字符A,012表示转义字符n,0或000表示ASCII码为0的控制字符,即“空”字符。本讲稿第十三页,共四十页2.字符串常量字符串常量是用一对双引号()括起来的零个或多个字符的序列,例如:This is a string540134910000.00/*引号中有一个空格,本书中用 表示一个空格*/*引号中什么也没有*/a/*引号中有一个转义字符*/字符串常量在内存中存储时,系统自动在每个字符串常量的尾部加一个“字符串结束标志”字符0。因此,长度为n个字符的字符串常量,在内存中要占用n+1个字节的空间。例如,hello在内存中的形式是:104 101 108 108 111 0为了能直观理解,以后表示字符串时,直接用字符本身表示。上例表示成:hello0本讲稿第十四页,共四十页分析【程序2-2】的运行结果。/*文件名:chap02_2.cpp*/#include#include void main()char*cstr=Chinaan101t;printf(%dn,strlen(cstr);printf(%sn,cstr);程序运行结果:10ChinaA 程序中Chinaan101t是一个符号常量,由字符指针cstr指向它(有关字符指针的内容在后续章节中介绍)。该符号常量似乎有17个字符,事实上,它只有10个字符,分别是C、h、i、n、a、a、n、101(对应字符A)、t和,其中有5个转义字符。本讲稿第十五页,共四十页 字符常量A(A)与字符串常量A(“A”)的区别:定界符不同。字符常量使用单引号,而字符串常量使用双引号。长度不同。字符常量的长度固定为1,而字符串常量的长度可以是0,也可以是某个整数。存储要求不同。字符常量存储的是字符的ASCII码值,而字符串常量除了要存储有效的字符外,还要存储一个结束标志0。在C语言中,没有专门的字符串变量,字符串常量如果需要存储在变量中,要用字符数组来解决。详细内容将在后续章节中介绍。本讲稿第十六页,共四十页变量在程序运行过程中,其值可以被改变的量称为变量。变量有两个要素:变量名。每个变量都必须有一个名字,即变量名。变量命名应遵循标识符的命名规则。变量值。在程序运行过程中,变量值存储在内存中;不同类型的变量,占用的内存单元(字节)数不同。在程序中,通过变量名来引用变量的值。【程序2-3】用来输出两个整数相加、相减和相乘的结果,代码如下。/*文件名:chap02_3.cpp*/#include void main()int x,y;printf(请输入两个整数,中间用空格隔开:);scanf(%d%d,&x,&y);printf(%d+%d=%dn,x,y,x+y);printf(%d-%d=%dn,x,y,x-y);printf(%d*10%d=%dn,x,y,x*y);程序运行结果:请输入两个整数,中间用空格隔开:10 510+5=1510-5=510*5=50本程序中,x和y定义成整型变量,用于接受用户输入的值。本讲稿第十七页,共四十页 变量的定义与初始化在C语言中,要求对所有用到的变量必须先定义后使用。在定义变量的同时,进行赋初值的操作称为变量初始化。变量定义的格式如下:存储类型 数据类型 变量名1,变量名2;例如:int i,j,k;/*定义i,j,k为整型变量*/long m,n;/*定义m,n为长整型变量*/float a,b,c;/*定义a,b,c为实型变量*/char ch1,ch2;/*定义ch1,ch2为字符型变量*/变量初始化的一般格式如下:存储类型 数据类型 变量名1=初值1,变量名2=初值2,;例如:float f1=1.23,f2,f3;该语句定义了f1,f2和f3三个实型变量,同时初始化了变量 f1。本讲稿第十八页,共四十页表达式 以上小节介绍了数据的类型,以及常量、变量的概念和定义,那么如何处理这些数据呢?可以用代表一定运算功能的运算符将运算对象连接起来,并且以符合C的语法规则构成一个说明运算过程的式子(即表达式)来完成对数据的处理。其运算对象包括常量、变量、函数等。本讲稿第十九页,共四十页运算符简介 运算符是C语言里用于描述对数据进行运算的特殊符号。有了基本数据对象和运算符,就可以写出描述计算的表达式了。语言具有丰富而繁多的运算符,由它构成了各种表达式,这是其它任何程序设计语言所不可比的。其中有些运算符已超出了一般运算符的概念,这为编写程序带来了很大的方便性和灵活性,使程序简洁而高效。但另一方面,由于运算符丰富也会产生不便于记忆、应用难度较高等问题。初学者一定要注意运算符、表达式和运算过程的使用规则,这是编程的基本条件。Turbo C+3.0的运算符非常丰富,主要分为三大类:算术运算符,关系运算符与逻辑运算符,按位运算符。除此之外,还有一些用于完成特殊任务的运算符。下面分别进行介绍。本讲稿第二十页,共四十页算术运算符和算术表达式 表2-3列出了C语言中允许的算术运算符。在C语言中,运算符“+”、“”、“*”和“/”的用法与大多数计算机语言的相同,几乎可用于所有C语言内定义的数据类型。当“/”被用于整数或字符时,结果取整。例如,在整数除法中,10/3=3。一元减法的实际效果等于用-1乘单个操作数,即任何数值前放置减号将改变其符号。模运算符“%”在C语言中也同它在其它语言中的用法相同。切记,模运算取整数除法的余数,所以“%”不能用于float和double类型。运算符作用运算符作用减法,也是一元减法%模运算+加法-自减(减1)*乘法+自增(增1)/除法本讲稿第二十一页,共四十页下面的程序说明下面的程序说明%用法的程序段。用法的程序段。int x,y;x=10;y=3;printf(%d,x/y);/*显示显示3*/printf(%d,x%y);/*显示显示1,整数除法的余数,整数除法的余数*/x=1;y=2;printf(%d,%d,x/y,x%y);/*显示显示0,1*/最后一行打印一个最后一行打印一个0和一个和一个1,因为,因为1/2整除时为整除时为0,余数为,余数为1,故,故1%2取余数取余数1。本讲稿第二十二页,共四十页赋值运算符和赋值表达式 赋值运算构成了语言最基本、最常用的赋值语句,同时语言还赋值运算构成了语言最基本、最常用的赋值语句,同时语言还允许赋值运算符允许赋值运算符=与与10种运算符联合使用,形成组合赋值运算,使种运算符联合使用,形成组合赋值运算,使得程序简明而精练。得程序简明而精练。1.赋值运算符赋值运算符 赋值运算符用赋值运算符用=表示,其功能是计算赋值运算符表示,其功能是计算赋值运算符=右边表达式右边表达式的值,并将计算结果赋给的值,并将计算结果赋给左边的变量。例如:左边的变量。例如:n=12.3;/*直接将实型数直接将实型数12.3赋给变量赋给变量n*/c=a*b;/*将将a和和b进行乘法运算,所得到的结果赋给变量进行乘法运算,所得到的结果赋给变量c*/注意:赋值运算符注意:赋值运算符=与数学中的等号完全不同,数学中的等号表示与数学中的等号完全不同,数学中的等号表示在该等号两边的值是相等的,而赋值运算符在该等号两边的值是相等的,而赋值运算符=是指要完成是指要完成=右边右边表达式的运算,并将运算结果存放到表达式的运算,并将运算结果存放到=左边指定的内存变量中。可左边指定的内存变量中。可见,赋值运算符完成两类操作,一是计算,二是赋值。见,赋值运算符完成两类操作,一是计算,二是赋值。本讲稿第二十三页,共四十页2.赋值表达式 赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。它的一般形式为:变量名表达式 对赋值表达式的求解过程:计算赋值运算符右边表达式的值,并将计算结果赋值给赋值运算符左边的变量。赋值表达式变量名表达式的值就是赋值运算符左边变量的值。例如上面提到的算术表达式:(a+b+c)/(sqrt(a)+b*(+sin(y)+sin(z)写成赋值表达式为:v=(a+b+c)/(sqrt(a)+b*(+sin(y)+sin(z)。其中v是变量,赋值号右边是算术表达式,v的值就是这个算术表达式的值,也就是该赋值表达式的值。以下的赋值表达式表示:i=5/*将常数5赋值给变量i,赋值表达式i=5的值就是5*/a=3.5-b/*计算算术表达式3.5-b的值并赋值给变量a*/x=(a+b+c)/12.4*8.5/*计算算术表达式(a+b+c)/12.4*8.5的值并赋值给变量x*/本讲稿第二十四页,共四十页逗号运算符和逗号表达式 作为一个操作符,逗号把几个表达式串在一起。逗号操作符的左侧作为一个操作符,逗号把几个表达式串在一起。逗号操作符的左侧总是作为总是作为void(void(无值无值),这意味着其右边表达式的值变为以逗号分开的,这意味着其右边表达式的值变为以逗号分开的整个表达式的值。例如:整个表达式的值。例如:x=(y=3,y+1);x=(y=3,y+1);这行将这行将3 3赋给赋给y y,然后将,然后将4 4赋给赋给x x,因为逗号操作符的优先级比赋值操,因为逗号操作符的优先级比赋值操作符优先级低,所以必须使用括号。作符优先级低,所以必须使用括号。实际上,逗号表示操作顺序。当它在赋值语句右边使用时,所赋的实际上,逗号表示操作顺序。当它在赋值语句右边使用时,所赋的值是逗号分隔开的表中最后那个表达式的值。例如:值是逗号分隔开的表中最后那个表达式的值。例如:y=10;y=10;x=(y=y-5,25/y);x=(y=y-5,25/y);执行后,执行后,x x的值是的值是5 5,因为,因为y y的起始值是的起始值是1010,减去,减去5 5之后结果再除以之后结果再除以2525,得到最终结果。在某种意义上可以认为,逗号操作符和标准英语的,得到最终结果。在某种意义上可以认为,逗号操作符和标准英语的andand是同义词。是同义词。本讲稿第二十五页,共四十页类型转换在对赋值表达式求解过程中,如果赋值运算符两边的数据类型不一致,赋值时要进行类型转换。其转换工作由编译自动实现,转换原则是以“=”左边的变量类型为准。即将“=”右边的值转换为与“=”左边的变量类型一致。下面用【程序2-4】说明一下:/*文件名:chap02_4.cpp*/#include void main()int i=5;/*说明整型变量i并初始化为5*/float a=3.5,a1;/*说明实型变量a和a1并初始化a*/double b=123456789.123456789;/*说明双精度型变量b并初始化*/char c=A;/*说明字符变量c并初始化为A*/printf(i=%d,a=%f,b=%f,c=%cn,i,a,b,c);/*输出i,a,b,c的初始值*/a1=i;i=a;a=b;c=i;/*整型变量i的值赋值给实型变量a1,实型变量a的值赋给整型变量i,双精度型变量b的值赋值给实型变量a,整型变量i的值赋值给字符变量c*/printf(i=%d,a=%f,a1=%f,c=%cn,i,a,a1,c);/*输出i,a,a1,c赋值以后的值*/本讲稿第二十六页,共四十页Your Topic Goes Here运行该程序的输出结果如下:运行该程序的输出结果如下:i=5,a=3.500000,b=123456789.123457,c=Ai=5,a=3.500000,b=123456789.123457,c=Ai=3,a=123456792.000000,a1=5.000000,c=(i=3,a=123456792.000000,a1=5.000000,c=(心形字符心形字符)由以上运行结果可见:由以上运行结果可见:将将floatfloat型数据赋值给型数据赋值给intint型变量时,先将型变量时,先将floatfloat型数据舍去其小数型数据舍去其小数部分,然后再赋值给部分,然后再赋值给intint型变量。型变量。int int型数据赋给型数据赋给floatfloat型变量时,先将型变量时,先将intint型数据转换为型数据转换为floatfloat型数据,型数据,并以浮点数的形式存储到变量中,其值不变。并以浮点数的形式存储到变量中,其值不变。double double型实数赋给型实数赋给floatfloat型变量时,先截取型变量时,先截取doubledouble型实数的前型实数的前7 7位有位有效数字,然后再赋值给效数字,然后再赋值给floatfloat型变量。型变量。int int型数据赋值给型数据赋值给charchar型变量时,由于型变量时,由于intint型数据用两个字节表示,型数据用两个字节表示,而而charchar型数据只用一个字节表示,所以先截取型数据只用一个字节表示,所以先截取intint型数据的低型数据的低8 8位,然位,然后赋值给后赋值给charchar型变量。型变量。本讲稿第二十七页,共四十页 位运算 C C语言和其它高级语言不同的是它完全支持按位运算符。这与汇编语语言和其它高级语言不同的是它完全支持按位运算符。这与汇编语言的位操作有些相似。表言的位操作有些相似。表2-42-4列举了一些为运算符,如下示:列举了一些为运算符,如下示:运算符含义优先级按位求反5(高)右移4&按位与3按位异或2|按位或1(低)以上位运算符中除“”以外,均为二目运算符,即要求两侧各有一个运算对象。本讲稿第二十八页,共四十页1.“按位求反”运算()“”是一个单目运算符,用来对一个二进制数按位求反,即将0变1,1变0。例如,025是对八进制数25(即二进制数00010101)按位求反。0000000000010101-1111111111101010 即八进制数177752。因此,025的值为八进制数177752,并非-025。本讲稿第二十九页,共四十页2.“左移”运算()“左移”运算符是双目运算符,用来将一个数的各二进位全部左移若干位。运算符左边是移位对象,右边是整型表达式,代表左移的位数。左移时,右端(低位)补0,左端(高位)移出的部分舍弃。例如:int a=025;a=a2;将a的二进制数左移2位,右补0。20000000000010101-0000000001010100即八进制数54。因此,025)右移运算符的使用方法与左移运算符一样,所不同的是移位方向相右移运算符的使用方法与左移运算符一样,所不同的是移位方向相反。右移时,右端(低位)移出的二进制数舍弃,左端(高位)移入反。右移时,右端(低位)移出的二进制数舍弃,左端(高位)移入的二进制数分两种情况:对于无符号整数和正整数,高位补的二进制数分两种情况:对于无符号整数和正整数,高位补0;对于;对于负整数,高位补负整数,高位补1。例如:例如:int a=025;a=a2;将将a的二进制数右移的二进制数右移2位,由于位,由于a为正整数,左补为正整数,左补0。20000000000010101-0000000000000101即八进制数即八进制数5。因此,。因此,0252的值为八进制数的值为八进制数5。本讲稿第三十一页,共四十页4.“按位与”运算(&)按位与运算的规则是:参加运算的两个数据,按二进位进行“与”运算,如果两个相应的二进位都为1,则该位的结果值为1,否则为0。即:0&0=0;0&l=0;1&0=0;1&1=1;例如:表达式12&10的运算如下:120000000000001100&100000000000001010-80000000000001000即十进制数8。本讲稿第三十二页,共四十页 分析以上运算结果可知,按位与运算具有以下特征:任何位上的二进制数,只要和0进行与运算,该位即被屏蔽(清零);和1进行与运算,该位保留原值不变。利用这一特征可以实现如下功能:(1)清零。如果想将一个单元清零,也就是使其全部二进位为0,只需与0进行按位与运算,即可达到清零目的。(2)取一个数中某些指定位。如有一个整数a(2个字节),想要其中的低字节,只需将a与八进制数377(0000000011111111)按位与即可。如果想取两个字节中的高字节,只需将a与八进制数177400(1111111100000000)按位与即可。(3)要想将哪一位保留下来,就与一个数进行&运算,此数在该位取1,例如有一个数01010100(十进制数84),想把其中左面第3、4、5、7、8位保留下来,设计一个数,其左面第3、4、5、7、8位为1,其他位为0,即为十进制数59,将这两个数进行按位与即可。本讲稿第三十三页,共四十页5.“按位异或”运算()按位异或的运算规则是:参与运算的两个运算数中相对应的二进制按位异或的运算规则是:参与运算的两个运算数中相对应的二进制位上同号,则结果为位上同号,则结果为0,异号则为,异号则为1。即:。即:0&0=0;0&1=1;1&0=1;1&1=0;例如,例如,1210:120000000000001100 100000000000001010-60000000000000110即十进制数即十进制数6。按位异或运算有如下应用:。按位异或运算有如下应用:本讲稿第三十四页,共四十页(1)使特定位翻转)使特定位翻转假假设设有有01111010,想想使使其其低低4位位翻翻转转,即即1变变为为0,0变变为为1。可可以以将将它它与与00001111进进行行按按位位异异或或运运算算,结结果果为为01110101,结结果果值值的的低低4位位正正好好是是原原数数低低4位位的的翻翻转转。要要使使哪哪几几位位翻翻转转就就将将与与其其进进行行按按位位异异或或运运算算的的该该几几位位置置为为1即即可可。这这是是因因为为原原数数中中值值为为1的的位位与与1进进行行按按位位异异或或运运算算得得0,原原数数中的位值中的位值0与与1进行按位异或运算的结果得进行按位异或运算的结果得1。(2)与)与0按位异或,保留原值按位异或,保留原值(3)交换两个值,不用临时变量)交换两个值,不用临时变量假设要想交换假设要想交换a、b之值,可以用以下赋值语句实现:之值,可以用以下赋值语句实现:a=ab;b=ba;a=ab;因为因为a=ab,(假设,(假设a和和b最初的值加上下划线)则:最初的值加上下划线)则:b=ba=b(ab)=abb=a0=aa=ab=(ab)a=aab=0b=b本讲稿第三十五页,共四十页6.“按位或”运算(|)按位或运算的规则是:参加运算的两个数据,按二进位进行“或”运算,如果两个相应的二进位都为0,则该位的结果值为0,否则为1。即:0|0=0;0|l=1;1|0=1;1|1=1;例如:表达式12|10的运算如下:120000000000001100|100000000000001010-140000000000001110即十进制数14。分析以上运算结果可知,按位或运算具有以下特征:任何位上的二进制数,只要和1进行或运算,该位即为1;和0进行或运算,该位保留原值不变。例如,a是一个整数(16位),a=a|0377,使a的低8位全置为1,高8位保留原样。本讲稿第三十六页,共四十页7.位运算赋值运算符 位运算符与赋值运算符可以组成复合赋值运算符,这样的复合赋值位运算符与赋值运算符可以组成复合赋值运算符,这样的复合赋值运算符如表运算符如表2-5所列。所列。复合赋值运算符表达式等价的表达式=a=na=a=a=na=an&=a&=ba=a&b=a=ba=ab|=a|=ba=a|b表2-5 复合赋值运算符本讲稿第三十七页,共四十页8.不同长度的数据进行位运算位运算的运算数可以是整型和字符型数据。如果两个运算数类型不同时位数亦会不同。遇到这种情况,系统将自动进行如下处理:(1)先将两个运算数右端对齐。(2)再将位数短的一个运算数往高位扩充,即无符号数和正整数左侧用0补全;负数左侧用1补全;然后对位数相等的这两个运算数,按位进行位运算。本讲稿第三十八页,共四十页【程序2-5】编写一个程序,实现无符号16位数的循环左移n位。采用unsigned short类型存放无符号16位数。C语言中只有左、右移位,而没有循环移位功能。左移和循环左移的区别在于对从左边(高端)移出的n位数的处理上。左移时,移出的n位数被丢弃,循环左移时,移出的n位数应依次放在右边(低端)的n位上。为将无符号16位数d达到循环左移的目的,实现过程如下:(1)先将d高端的n位数通过“右移”操作移至低端的n位上(高端全为0),把结果存入中间变量a中。(2)再通过“左移”运算将d左移n位(低端移入的全为0),把结果存入另一中间变量b中。(3)最后利用按位或运算将这两个中间变量中的内容“拼装”在一起,完全循环左移功能。本讲稿第三十九页,共四十页将循环左移功能设计成leftmove()函数,对应的程序如下:/*文件名:chap02_5.cpp*/#include void leftmove(unsigned short*d,int n)unsigned short a,b;a=*d(16-n);b=(*d)n;*d=a|b;void main()unsigned short d;d=0 x6271;leftmove(&d,4);printf(%xn,d);程序运行结果:2716本讲稿第四十页,共四十页

    注意事项

    本文(第2章 基本数据类型及运算符原始精选文档.ppt)为本站会员(石***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开