3.7C++关系运算和逻辑运算
- 格式:doc
- 大小:56.00 KB
- 文档页数:4
无论是加减乘除还是大于小于,都需要用到运算符,在C语言中的运算符和我们平时用的基本上都差不多。
运算符包括赋值运算符、算术运算符、逻辑运算符、位逻辑运算符、位移运算符、关系运算符、自增自减运算符。
大多数运算符都是二目运算符,即运算符位于两个表达式之间。
单目运算符的意思是运算符作用于单个表达式。
(具体什么是表达式下一节再说)一、赋值运算符赋值语句的作用是把某个常量或变量或表达式的值赋值给另一个变量。
符号为‘=’。
这里并不是等于的意思,只是赋值,等于用‘==’表示。
注意:赋值语句左边的变量在程序的其他地方必须要声明。
得已赋值的变量我们称为左值,因为它们出现在赋值语句的左边;产生值的表达式我们称为右值,因为她它们出现在赋值语句的右边。
常数只能作为右值。
例如:count=5;total1=total2=0;第一个赋值语句大家都能理解。
第二个赋值语句的意思是把0同时赋值给两个变量。
这是因为赋值语句是从右向左运算的,也就是说从右端开始计算。
这样它先total2=0;然后total1=total2;那么我们这样行不行呢?(total1=total2)=0;这样是不可以的,因为先要算括号里面的,这时total1=total2是一个表达式,而赋值语句的左边是不允许表达式存在的。
二、算术运算符在C语言中有两个单目和五个双目运算符。
符号功能+ 单目正- 单目负* 乘法/ 除法% 取模+ 加法- 减法下面是一些赋值语句的例子,在赋值运算符右侧的表达式中就使用了上面的算术运算符:Area=Height*Width;num=num1+num2/num3-num4;运算符也有个运算顺序问题,先算乘除再算加减。
单目正和单目负最先运算。
取模运算符(%)用于计算两个整数相除所得的余数。
例如:a=7%4;最终a的结果是3,因为7%4的余数是3。
那么有人要问了,我要想求它们的商怎么办呢?b=7/4;这样b就是它们的商了,应该是1。
也许有人就不明白了,7/4应该是1.75,怎么会是1呢?这里需要说明的是,当两个整数相除时,所得到的结果仍然是整数,没有小数部分。
c语⾔运算符1.运算符概述运算符是⼀种编译器执⾏特定的数学或逻辑操作的符号。
C语⾔提供了以下类型的运算符:算术运算符关系运算符逻辑运算符位运算符赋值运算符条件运算符其他运算符2.算术运算符算术运算符分为单⽬运算符和双⽬运算符,单⽬运算符表⽰只需要⼀个操作数,双⽬运算符需要两个操作数。
# 2.1 双⽬算术运算符1)+ :加法,把两个操作数相加2)- :减法,从第⼀个操作数中减去第⼆个操作数3)* :乘法,把两个操作数相乘4)/ :除法,第⼀个操作数除以第⼆个操作数5)% :求模(取余),第⼀个操作数除以第⼆个操作数所得余数双⽬运算符中,C语⾔中的加号、减号与数学中的⼀样。
乘号、除号因为ASCII符号中没有与数学中相对应的符号,所以使⽤星号表⽰乘号,使⽤斜线表⽰除号。
C语⾔中增加了⼀个求模运算符,是⽤来取余的。
需要注意的是,求模运算符的两个操作数必须是整型。
【实例6.1】加减乘除以及取模运算#include <stdio.h>int main(){int a = 21;int b = 10;int c;float d = 2.5;double e;int f = -21;int g = -10;c = a + b;printf(" a + b = %d\n", c);c = a - b;printf(" a - b = %d\n", c);c = a * b;printf(" a * b = %d\n", c);c = a / b;printf(" a / b = %d\n", c);e = a / d;printf(" a / d = %lf\n", e);c = a % b;printf(" a %% b = %d\n", c);c = a % g;printf(" a %% g = %d\n", c);c = f % b;printf(" f %% b = %d\n", c);c = f % g;printf(" f %% g = %d\n", c);return0;}执⾏以上程序,输出结果为:a +b = 31a -b = 11a *b = 210a /b = 2a / d = 8.400000a %b = 1a % g = 1f % b = -1f %g = -1实例解析:加、减与数学中的⼀样,其中需要说明的是除法以及取模运算。
《单片机原理及应用(二)》模块一C51程序设计基础任务1:实例导航第二章C与80512.1 8051的编程语言1、8051的编程语言(四种):(1)BASIC语言(2)PL/M√(3)汇编语言√(4)C语言目前,汇编语言和C语言是广泛使用的两种单片机编程语言。
在未来的一段时间内,汇编语言和C语言还将同时存在,但从发展趋势看,C语言有逐渐取代汇编语言的可能。
最好的单片机编程者应是具有汇编语言基础,又精通C语言的。
2、C语言的优点(与汇编语言相比):(P41)(1)对单片机的指令系统不要求了解,仅要求对8051的存储器结构有所了解(2)寄存器的分配、不同存储器的寻址及数据类型等细节由编译器管理(3)程序有规范的结构,由不同的函数组成,这种方式可使程序结构化(4)编程及程序调试时间显著缩短,从而提高效率(5)提供库函数,具有较强的数据处理能力3、8051单片机C语言(单片机C51语言)了解一下单片机的种类:(查资料)2.2 Cx51编译器编译:C语言源程序转换成机器语言目标程序的过程,叫做编译。
编译器:能自动完成编译过程的一种计算机软件。
(1)C语言编译器(标准C)(2)C51编译器(经典8051单片机)(3)C x51编译器(经典8051单片机及派生产品)Cx51编译器完全遵照ANSI C语言标准,支持C语言的所有标准特征。
另外,还增加了可以直接支持8051结构的特征。
典型产品:KILE套装工具软件----------uVision2 集成开发环境的使用(P 302)例2-1:用uVision2软件编译调试一个C51程序(HELLO.C)基本步骤:(1)创建一个新项目(建在一个新文件夹下)并为项目选择一个CPU(此时会自动加入启动文件)(2)创建新程序文件(或打开旧程序文件)此例中,打开c:\kile\c51\examples\hello(3)将源文件添加到项目中此时还可修改工具选项(4)编译和链接项目(Build Target命令):翻译和链接源文件,并生成一个可以载入到uvision2调试器进行调试的绝对目标模块。
C语言中常见的表达式在C语言中,表达式是程序中的一部分,用于计算值并执行某些操作。
表达式由运算符、操作数和操作符组成。
在本文中,我们将介绍C语言中常见的表达式。
一、算术表达式算术表达式用于执行数学运算。
在C语言中,常见的算术运算符包括加法(+)、减法(-)、乘法(*)、除法(/)和求余(%)。
这些运算符用于进行加、减、乘、除和取余的操作。
下面是一些例子:1. 加法表达式int a = 5;int b = 3;int c = a + b; // c的值为82. 减法表达式int a = 5;int b = 3;int c = a - b; // c的值为23. 乘法表达式int a = 5;int b = 3;int c = a * b; // c的值为154. 除法表达式int a = 5;int b = 3;int c = a / b; // c的值为1,因为整数相除结果为整数5. 求余表达式int a = 5;int b = 3;int c = a % b; // c的值为2,因为5除以3余2二、关系表达式关系表达式用于比较两个值的关系,返回一个布尔值(true或false)。
常见的关系运算符包括等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)和小于等于(<=)。
下面是一些例子:1. 等于关系表达式int a = 5;int b = 3;bool result = (a == b); // result的值为false,因为a不等于b2. 不等于关系表达式int a = 5;int b = 3;bool result = (a != b); // result的值为true,因为a不等于b 3. 大于关系表达式int a = 5;int b = 3;bool result = (a > b); // result的值为true,因为a大于b4. 小于关系表达式int a = 5;int b = 3;bool result = (a < b); // result的值为false,因为a小于b5. 大于等于关系表达式int a = 5;int b = 3;bool result = (a >= b); // result的值为true,因为a大于等于b 6. 小于等于关系表达式int a = 5;int b = 3;bool result = (a <= b); // result的值为false,因为a小于等于b三、逻辑表达式逻辑表达式用于组合和比较多个关系表达式,返回一个布尔值(true或false)。
1.逻辑运算符逻辑运算符是指用形式逻辑原则来建立数值间关系的符号。
Turbo C的逻辑运算符如下:━━━━━━━━━━━━━━━━━━━━━━━━━━━━━操作符作用─────────────────────────────&& 逻辑与|| 逻辑或! 逻辑非━━━━━━━━━━━━━━━━━━━━━━━━━━━━━2.关系运算符关系运算符是比较两个操作数大小的符号。
Turbo C的关系运算符如下:━━━━━━━━━━━━━━━━━━━━━━━━━━━━━操作符作用─────────────────────────────> 大于>= 大于等于< 小于<= 小于等于== 等于!= 不等于━━━━━━━━━━━━━━━━━━━━━━━━━━━━━关系运算符和逻辑运算符的关键是真(true)和假(false)的概念。
Turbo C中true可以是不为0的任何值, 而false则为0。
使用关系运算符和逻辑运算符表达式时, 若表达式为真(即true)则返回1, 否则, 表达式为假(即false), 则返回0。
例如:100>99 返回110>(2+10) 返回0!1&&0 返加0对上例中表达式!1&&0, 先求!1和先求1&&0将会等于出不同的结果, 那么何者优先呢? 这在Turbo C中是有规定的。
有关运算符的优先级本节后面将会讲到。
3.按位运算符Turbo C和其它高级语言不同的是它完全支持按位运算符。
这与汇编语言的位操作有些相似。
Turbo C中按位运算符有:━━━━━━━━━━━━━━━━━━━━━━━━━━━━操作符作用────────────────────────────& 位逻辑与| 位逻辑或^ 位逻辑异或- 位逻辑反>> 右移<< 左移━━━━━━━━━━━━━━━━━━━━━━━━━━━━按位运算是对字节或字中的实际位进行检测、设置或移位, 它只适用于字符型和整数型变量以及它们的变体, 对其它数据类型不适用。
中山大学南方学院电子通信与软件工程系课程名称:高级语言程序设计实践实验题目:运算符和表达式附:实验报告专业:年级:完成日期:学号:姓名:成绩:一、实验目的1、能够使用C语言进行简单的算术运算、关系运算和逻辑运算。
2、掌握不同的类型数据之间赋值的规律。
3、进一步熟悉C语言程序的编辑、编译和运行的过程。
二、实验原理1、用int定义整型变量来存放整数;2、用float定义浮点数变量来存放小数;3、使用scanf() 函数从键盘输入两个整型数据,并赋值给两个变量。
三、实验过程1、算术运算实验代码如下:#include <stdio.h>#include <stdlib.h>int main(){int a=2, b=3;float x=3. 9, y=2. 3;float result;result=(float) (a+b) /2+(int) x%(int) y;return result}输出结果如图:2、算术运算实验代码如下:#include <stdio.h>#include <stdlib.h>int main(){int number;int a1, a2, a3;printf("请输入一个三位数:");scanf("%d", &number) ;a1=number%10;number=number/10;a2=number%10;a3=number/10;printf("三位数%d的个位数字是%d,十位数字是%d,百位数字是%d\n",number,a1, a2, a3) ;return 0;}输出结果如图:3、关系运算与逻辑运算实验代码如下:#include <stdio.h>#include <stdlib.h>int main(){int x;printf("输入x的值:") ;scanf("%d", &x) ;printf("表达式(x>0)的值:%d\n", x>0) ;printf("表达式(x>=-20&&x<=-10)的值:%d\n", x>=-20&&x<=-10) ;printf("表达式(x>=100||x<10)的值:%d\n", x>=-20&&x<=-10) ;printf("表达式(x>20&&x%3==0的值:%d\n", x>20&&x%3==0) ;if(x%5==0&&x%3==0)printf("yes\n") ;elseprintf ("no\n") ;return 0;}输出结果如图:4、综合任务实验代码如下:#include <stdio.h>#include <stdlib.h>int main(){int grad1, grad2;scanf("%d%d", &grad1, &grad2) ;printf("表达式(grad1>=0&&grad1<=100)值:%d\n",grad1>=0&&grad1<=100);printf("表达式(grad2>=0&&grad2<=100)值:%d\n",grad2>=0&&grad2<=100);printf("%d", grad1>grad2? grad1:grad2) ;return 0;}输出结果如图:四、思考并回答以下问题1、举例说明逻辑运算符的短路特性。
教育学,单项选择题单项选择题1.1.下列属于教育现象的是(C)A.老猫教幼仔捕老鼠B.老鸭教小鸭游水C.影响人的身心发展为目标的活动D.父母给孩子补充营养1.2.教育活动中物的因素有(C) A.教育者B.受教育者C.教育内容与物资D.教师1.3.教育活动中的受教育者是(A)A.承担学习的责任,进入学习过程中的人B.各级教育管理人员C.学校教育中的教师及其他工作人员D.社会教育中起到教育作用的人1.4.教育者和受教育者的关系是(B)A.受教育者是消极被动任教育者摆布的人B.教育者起主导作用,受教育者是主体C.受教育者是教育过程的中心,教育者只是旁观者D.教育者相对受教育者而言处于受控者、接受者的地位1.5.下列媒体能够成为教育物质资源的是(D)A.不健康的录像带与光盘B.易损坏或易伤害的教具C.不适应学生发展水平的图书D.教室内部的固定桌椅与黑板1.6.下面陈述不属于教育功能的是(D)A.促进人的个体社会化B.促进经济发展C.促进政治稳定D.促进人的繁衍生存1.7.当今世界教育增长的模式特点是(B)A.增长速度慢B.增长速度快C.各地教育的增长呈现均衡态D.规模较小1.8.教育现代化的核心是(A)A.教育观念现代化B.教育内容现代化C.教育手段现代化D.教育制度现代化2.1.下列叙述不属于精神环境的是(B)A.父母及家庭成员的表率B.居住环境与生活条件C.居住环境中的人际关系及情调D.社会环境中的道德水准和文化生活2.2.下面对各阶段学前教育目标叙述正确的是(D)A.工业社会初期——以发展儿童智力为中心B.工业社会——促进儿童身心和谐发展C.现代社会初期——主要为工作的母亲照管儿童D.现代社会——促进儿童身体的、情绪的、智能的和社会性的全面发展2.3.20世纪末统计的我国3~6岁幼儿入园率约为(B)A.25%B.35%C.45%D.55%2.4.我国传统文化对教育的影响表现在(A)A.我国传统文化影响下的教育是重视道德和伦理教育,忽视自然现象方面各种事物知识的教育B.重视个性的发展,忽视群体性的发展C.系统科学理论发达而应用技术极不发达D.重视思辨推理,忽视个人的体验与直观2.5.文化水平对教育的直接影响表现为(B)A.文化发达→促进生产力发展→增加教育的物质来源→增进人口受教育水平B.教师文化水平→教育水平→学生文化水平→受教育水平→家长文化水平→下一代C.家长文化水平→学生文化水平→教育水平→下一代D.教育水平→教育文化水平→受教育水平→学生文化水平→家长文化水平→下一代2.6.我国人口的现状是(D)A.城市人口比重大B.人口地域分布均匀C.人口年龄结构成老龄化D.人口素质较差3.1.下列关于儿童的发展论述不正确的是(D)A.儿童身体的发展是心理发展的基础B.心理发展反过来影响儿童的生理发展C.儿童发展是儿童身心有规律地量变与质变过程D.儿童年龄愈小,儿童身体发展与心理发展相互影响愈小3.2.“成熟势力说”的创始人是(B)A.柏拉图B.格塞尔C.华生D.皮亚杰3.3.“人之初,性本善;性相近,习相远”指的是(B)A.遗传对人发展的作用B.环境对人发展的作用C.先天环境对人发展的作用D.成熟对人发展的作用3.4.“白板说”是由下列哪个教育家提出的(D)A.华生B.柏拉图C.布鲁纳D.洛克3.5.“教育万能论”的提出者是(A)A.华生B.苏格拉底C.皮亚杰D.安德森3.6.“回忆说”的提出者是(A)A.柏拉图B.苏格拉底C.亚里士多德D.色诺芬3.7.关于个体发展的特征的论述,不正确的一项是(D)A.个体发展从简单到复杂B.个体发展从一般到特殊C.个体发展由头到脚,由中间向四周进行D.个体发展是从特殊到一般3.8.皮亚杰把儿童智力的发展划分为四个阶段,它们依次是(B)A。
C语言算术运算符、关系运算符和逻辑运算符优先级详解一、算术运算符1.1 加法运算符(+)加法运算符用于对两个数进行相加操作,例如:a + b。
在C语言中,加法运算符的优先级较低。
1.2 减法运算符(-)减法运算符用于对两个数进行相减操作,例如:a - b。
和加法运算符一样,减法运算符的优先级也较低。
1.3 乘法运算符(*)乘法运算符用于对两个数进行相乘操作,例如:a * b。
在C语言中,乘法运算符的优先级比加法和减法运算符高。
1.4 除法运算符(/)除法运算符用于对两个数进行相除操作,例如:a / b。
和乘法运算符一样,除法运算符的优先级比加法和减法运算符高。
1.5 取模运算符()取模运算符用于求两个数相除后的余数,例如:a b。
在C语言中,取模运算符的优先级和乘法、除法运算符相同。
二、关系运算符2.1 等于运算符(==)等于运算符用于判断两个数是否相等,例如:a == b。
在C语言中,等于运算符的优先级较低。
2.2 不等于运算符(!=)不等于运算符用于判断两个数是否不相等,例如:a != b。
和等于运算符一样,不等于运算符的优先级较低。
2.3 大于运算符(>)大于运算符用于判断一个数是否大于另一个数,例如:a > b。
在C语言中,大于运算符的优先级较低。
2.4 小于运算符(<)小于运算符用于判断一个数是否小于另一个数,例如:a < b。
和大于运算符一样,小于运算符的优先级较低。
2.5 大于等于运算符(>=)大于等于运算符用于判断一个数是否大于或等于另一个数,例如:a >= b。
在C语言中,大于等于运算符的优先级较低。
2.6 小于等于运算符(<=)小于等于运算符用于判断一个数是否小于或等于另一个数,例如:a <= b。
和大于等于运算符一样,小于等于运算符的优先级较低。
三、逻辑运算符3.1 逻辑与运算符()逻辑与运算符用于判断多个条件是否同时成立,例如:(a > 0) (b < 10)。
c语言逻辑运算符和关系运算符优先级摘要:一、前言二、C 语言逻辑运算符1.与运算符(&)2.或运算符(|)3.异或运算符(^)4.非运算符(~)三、C 语言关系运算符1.等于运算符(==)2.不等于运算符(!=)3.大于运算符(>)4.小于运算符(<)5.大于等于运算符(>=)6.小于等于运算符(<=)四、运算符优先级1.逻辑运算符优先级2.关系运算符优先级五、总结正文:【前言】C 语言作为一门广泛应用于计算机编程的语言,逻辑运算和关系运算在程序设计中占据着重要地位。
了解并熟练掌握逻辑运算符和关系运算符的优先级,有助于编写高效、正确的程序代码。
【C 语言逻辑运算符】C 语言逻辑运算符主要包括与运算符(&)、或运算符(|)、异或运算符(^)和非运算符(~)。
这些运算符用于对整数或逻辑值进行逻辑运算。
1.与运算符(&):对应位全为1 时,结果为1,否则为0。
2.或运算符(|):对应位全为0 时,结果为0,否则为1。
3.异或运算符(^):对应位相同为0,不同为1。
4.非运算符(~):对一个二进制数的每一位执行非运算,即0 变1,1 变0。
【C 语言关系运算符】C 语言关系运算符主要包括等于运算符(==)、不等于运算符(!=)、大于运算符(>)、小于运算符(<)、大于等于运算符(>=)和小于等于运算符(<=)。
这些运算符用于比较两个值的大小关系。
1.等于运算符(==):两个值相等时返回1,否则返回0。
2.不等于运算符(!=):两个值不相等时返回1,否则返回0。
3.大于运算符(>):左边的值大于右边的值时返回1,否则返回0。
4.小于运算符(<):左边的值小于右边的值时返回1,否则返回0。
5.大于等于运算符(>=):左边的值大于或等于右边的值时返回1,否则返回0。
6.小于等于运算符(<=):左边的值小于或等于右边的值时返回1,否则返回0。
1.c语言的逻辑运算符有哪些?
C语言逻辑运算符分别是:或(||)、且(&&)、非(!),分别对应于命题逻辑中的OR、AND、NOT运算。
逻辑运算符:或||。
在命题逻辑中,当P=1或Q=1时,P||Q等于1。
逻辑运算符:且&&。
在命题逻辑中,当P=1且Q=1时,P&&Q才等于1。
逻辑运算符:非!。
在命题逻辑中,当P等于0时,!P等于1,反之亦然。
C语言的运算符号
比较特别的是,比特右移(>>)运算符可以是算术(左端补最高有效位)或是逻辑(左端补0)位移。
例如,将11100011右移3比特,算术右移后成为11111100,逻辑右移则为00011100。
因算术比特右移较适于处理带负号整数,所以几乎所有的编译器都是算术比特右移。
运算符的优先级从高到低大致是:单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符(=)和逗号运算符。
南开20春学期《Python编程基础》在线作业满分答案1判断一个类是否是另一个类的子类,应使用内置函数( )。
A isinstanceB issubclassC typeD isclass答案:B2lambda函数是指( )。
A 在一个函数内部通过调用自己完成问题的求解B 不使用def定义函数的形式C 一个函数不断被其他函数调用完成问题的求解D 把函数作为参数的一种函数答案:B3如果要计算两个集合的交集,应使用集合中的( )方法。
A intersectionB unionC differenceD symmetric_difference答案:A4已知“d=dict(x=1,y=2)”,则执行“d.clear()”后,“len(d)”返回的结果是( )。
A 0B 1C 2D 报错答案:A5已知“str='a\rb\r\nc\n'”,则“str.splitlines()”的返回结果是( )。
A ['a','b','c']B ['a\r','b\r\n','c\n']C ['a\r','b\r','c']D ['a\r','b','c']答案:A6高阶函数是指( )。
A 在一个函数内部通过调用自己完成问题的求解B 在一个函数内部通过不断调用其他函数完成问题的求解C 一个函数不断被其他函数调用完成问题的求解D 把函数作为参数的一种函数答案:D7第一个参数对应类的实例对象的方法是( )。
A 类方法B 静态方法C 内置方法D 普通方法答案:D8已知“t=tuple(range(0,10))”,则print(t[-1:3:-2])的结果是( )。
A [9,7,5]B (9,7,5)C [9,7,5,3]D (9,7,5,3)答案:B9一个函数中定义的变量是( )。
往往要求根据某个指定的条件是否满足来决定执行的内容。
例如,购物在1000元以下的打九五折,1000元及以上的打九折。
C++提供if语句来实现这种条件选择。
如:
if amount<1000 tax=0.95; //amount代表购物总额,tax代表折扣
else tax=0.9; //若amount<1000,条件满足,tax=0.95,否则tax=0.9
pay=amount*tax; //pay为实付款
流程可以用图3.4表示。
图3.4
关系运算和关系表达式
上面if语句中的“amount<1000”实现的不是算术运算,而是关系运算。
实际上是比较运算,将两个数据进行比较,判断比较的结果。
“amount<1000”就是一个比较式,在高级语言中称为关系表达式,其中“>”是一个比较符,称为关系运算符。
C++的关系运算符有:
< (小于)
<= (小于或等于) 优先级相同(高)
> (大于)
>= (大于或等于)
== (等于)
!= (不等于) 优先级相同(低)
关于优先次序:
∙前4种关系运算符(<,<=,>,>=)的优先级别相同,后两种也相同。
前4种高于后两种。
例如,“>”优先于“==”。
而“>”与“<”优先级相同。
∙关系运算符的优先级低于算术运算符。
关系运算符的优先级高于赋值运算符。
例如:
c>a+b 等效于c>(a+b)
a>b==c等效于(a>b)==c
a==b<c等效于a==(b<c)
a=b>c 等效于a=(b>c)
用关系运算符将两个表达式连接起来的式子,称为关系表达式。
关系表达式的一般形式可以表示为:表达式关系运算符表达式
其中的“表达式”可以是算术表达式或关系表达式、逻辑表达式、赋值表达式、字符表达式。
例如,下面都是合法的关系表达式:
a>b,a+b>b+c,(a==3)>(b==5),'a'<'b',(a>b)>(b<c)
关系表达式的值是一个逻辑值,即“真”或“假”。
例如,关系表达式“5==3”的值为“假”,“5>=0”
的值为“真”。
在C和C++中都用数值1代表“真”,用0代表“假”。
如果有以下赋值表达式:d=a>b 则d得到的值为1
f=a>b>c f得到的值为0
逻辑常量和逻辑变量
C语言没有提供逻辑型数据,关系表达式的值(真或假)分别用数值1和0代表。
C++增加了逻辑型数据。
逻辑型常量只有两个,即false(假)和true(真)。
逻辑型变量要用类型标识符bool来定义,它的值只能是true和false之一。
如
bool found, flag=false; //定义逻辑变量found和flag,并使flag的初值为false
found=true; //将逻辑常量true赋给逻辑变量found
由于逻辑变量是用关键字bool来定义的,因此又称为布尔变量。
逻辑型常量又称为布尔常量。
所谓逻辑型,就是布尔型。
设立逻辑类型的目的是为了看程序时直观易懂。
在编译系统处理逻辑型数据时,将false处理为0,将true处理为1。
因此,逻辑型数据可以与数值型数据进行算术运算。
如果将一个非零的整数赋给逻辑型变量,则按“真”处理,如
flag=123; //赋值后flag的值为true
cout<<flag;
输出为数值1。
逻辑运算和逻辑表达式
有时只用一个关系表达式还不能正确表示所指定的条件。
C++提供3种逻辑运算符:
(1) && 逻辑与(相当于其他语言中的AND)
(2) || 逻辑或(相当于其他语言中的OR)
(3) !逻辑非(相当于其他语言中的NOT)
逻辑运算举例如下:
a && b若a,b为真,则a && b为真。
a||b 若a,b之一为真,则a||b为真。
!a 若a为真,则!a为假。
书中表3.2为逻辑运算的“真值表”。
在一个逻辑表达式中如果包含多个逻辑运算符,按以下的优先次序:
(1) !(非)→&&(与)→?(或),即“!”为三者中最高的。
(2) 逻辑运算符中的“&&”和“||”低于关系运算符,“!”高于算术运算符。
例如:
(a>b) && (x>y) 可写成a>b && x>y
(a==b) || (x==y) 可写成a==b || x==y
(!a) || (a>b)可写成!a || a>b
将两个关系表达式用逻辑运算符连接起来就成为一个逻辑表达式,上面几个式子就是逻辑表达式。
逻辑表达式的一般形式可以表示为
表达式逻辑运算符表达式
逻辑表达式的值是一个逻辑量“真”或“假”。
前面已说明,在给出逻辑运算结果时,以数值1代表“真”,以0代表“假”,但在判断一个逻辑量是否为“真”时,采取的标准是: 如果其值是0就认为是“假”,如果其值是非0就认为是“真”。
例如:
(1) 若a=4,则!a的值为0。
因为a的值为非0,被认作“真”,对它进行“非”运算,得“假”,“假”以0代表。
(2) 若a=4,b=5,则a && b的值为1。
因为a和b均为非0,被认为是“真”。
(3) a,b值同前,a-b||a+b的值为1。
因为a-b和a+b的值都为非零值。
(4) a,b值同前,!a || b的值为1。
(5) 4 && 0 || 2 的值为1。
在C++中,整型数据可以出现在逻辑表达式中,在进行逻辑运算时,根据整型数据的值是0或非0,把它作为逻辑量假或真,然后参加逻辑运算。
通过这几个例子可以看出: 逻辑运算结果不是0就是1,不可能是其他数值。
而在逻辑表达式中作为参加逻辑运算的运算对象可以是0(“假”)或任何非0的数值(按“真”对待)。
如果在一个表达式中的不同位置上出现数值,应区分哪些是作为数值运算或关系运算的对象,哪些作为逻辑运算的对象。
实际上,逻辑运算符两侧的表达式不但可以是关系表达式或整数(0和非0),也可以是任何类型的数据,如字符型、浮点型或指针型等。
系统最终以0和非0来判定它们属于“真”或“假”。
例如'c ' && 'd'的值为1。
熟练掌握C++的关系运算符和逻辑运算符后,可以巧妙地用一个逻辑表达式来表示一个复杂的条件。
例如,要判别某一年(year)是否为闰年。
闰年的条件是符合下面两者之一: ①能被4整除,但不能被100整除。
②能被100整除,又能被400整除。
例如2004、2000年是闰年,2005、2100年不是闰年。
可以用一个逻辑表达式来表示:
(year % 4 == 0 && year % 100 != 0) || year % 400 == 0
当给定year为某一整数值时,如果上述表达式值为真(1),则year为闰年;否则year为非闰年。
可以加一个“!”用来判别非闰年:
!((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
若表达式值为真(1),year为非闰年。
也可以用下面的逻辑表达式判别非闰年:
(year % 4 != 0) || (year % 100 == 0 && year % 400 !=0)
若表达式值为真,year为非闰年。
请注意表达式中右面的括号内的不同运算符(%,!,&&,==)的运算优先次序。