📄 第7章 运算符、表达式、语句.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0049)http://www.d2school.com/bcyl/bhcpp/newls/ls07.htm --><HTML><HEAD><TITLE>教学--第七章 运算符、表达式、语句</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>P {
MARGIN: 1px 2px; LINE-HEIGHT: 150%
}
.节标题 {
FONT-WEIGHT: bold; FONT-SIZE: 12pt
}
TD {
FONT-SIZE: 9pt
}
.tdtitle {
FONT-SIZE: 20pt
}
.celltopline {
BORDER-TOP: #000000 1px solid
}
.menucell {
FONT-SIZE: 10pt
}
#glowtext {
FONT-SIZE: 10pt; FILTER: glow(color=red,strength=1); WIDTH: 100%
}
A:link {
FONT: 10pt 宋体; COLOR: blue; TEXT-DECORATION: none
}
A:visited {
FONT: 10pt 宋体; COLOR: purple; TEXT-DECORATION: none
}
A:active {
FONT: 10pt 宋体; COLOR: red; TEXT-DECORATION: underline
}
A:hover {
COLOR: blue; TEXT-DECORATION: underline
}
</STYLE>
<META content="MSHTML 6.00.2900.2769" name=GENERATOR></HEAD>
<BODY leftMargin=0 topMargin=3><!-- 标题 --><!--标题结束 --><A name=页首></A>
<CENTER>
<TABLE height=154 cellSpacing=4 cellPadding=4 width=760 border=0>
<TBODY>
<TR>
<TD
style="FONT-SIZE: 10pt; MARGIN-LEFT: 12px; TEXT-INDENT: 20px; LINE-HEIGHT: 150%; MARGIN-RIGHT: 12px; FONT-FAMILY: 宋体"
width="100%" height=148>
<H2>第七章 运算符、表达式、语句</H2>
<P> </P>
<P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls07.htm#7.1">7.1
算术运算符</A></P>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls07.htm#7.1.1">7.1.1
加减乘除</A></P>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls07.htm#7.1.2">7.1.2
求模运算</A></P>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls07.htm#7.1.3">7.1.3
赋值运算</A></P>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls07.htm#7.1.4">7.1.4
自运算</A></P>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls07.htm#7.1.5">7.1.5 ++
和 -- 运算</A></P>
<P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls07.htm#7.2">7.2
算术类型转换</A></P>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls07.htm#7.2.1">7.2.1
隐式类型转换</A></P>
<P> <A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls07.htm#7.2.2">7.2.2
显式类型转换</A></P>
<P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls07.htm#7.3">7.3
关系运算</A></P>
<P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls07.htm#7.4">7.4
逻辑运算</A></P>
<P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls07.htm#7.5">7.5
表达式</A></P>
<P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls07.htm#7.6">7.6
语句</A><BR></P>
<P>我们已经学会如何用变量来表达数据,比如我们现在要写一个《工资管理系统》……我看到很多学员本来昏昏欲睡的眼睛刷地放出了光芒:“老师,我们现在就能写《工资管理系统》系统了吗?”</P>
<P>回答:不能,我们刚刚学了点基础而已。不过,至少我们可以猜想,要写一个工资管理系统,总得懂得如何表达“工资”这个信息吧?还有像职工的年纪,职工人数等等,都得用C/C++语言来表达,这些我们现在都会啊!</P>
<P>double gongZi; //工资</P>
<P>int nianLin; //年龄</P>
<P>int zhiGongRenShu; //职工人数</P>
<P>看看,上面那些定义变量的代码,你都看得懂,写得出的吧?我们还是颇有成就感的。</P>
<P> </P>
<P>本章,我们将学习如何对数据进行运算。</P>
<H3><A name=7.1>7.1</A> 算术运算符</H3>
<H4><A name=7.1.1>7.1.1</A> 加减乘除</H4>
<P>先来学习最基本也最常用的加减乘除等运算。在C++中,加减乘除分别使用字符 '+'、'-'、'*'、'/'作为运算符号。</P>
<P>加、减、乘的操作没有什么需要特别说明之处,和生活中的相关运算完全一样,如:</P>
<P>int a = 1 + 2 - 3 * 4;</P>
<P>得到的结果:a等于 -9。当然,乘号使用*表示,这你得记。</P>
<P>除运算除了使用反余杠'/'表示以外,很重要的一点是别忘了,对于整数类型,或字符类型的数据进行除运算时,小数部分将被截掉,因为整型类型的数据不能保存小数部分,如:</P>
<P>int a = 5 / 2;</P>
<P>得到结果:a 等于 2,而不是2.5。</P>
<P>注意:可能大家会以为,之所以 5 /2 结果是2,是因为我们让一个整型变量a等于它,其实原因并不是因为a是int类型,请看:</P>
<P>float a = 5 / 2;</P>
<P>虽然a现在被声明为实型,但执行这句程序,a的值仍然是2。事实上,精度丢失是在计算机计算5/2时就发生了。所以,准确的写法是:</P>
<P> </P>
<P>float a = 5.0 / 2;</P>
<P>或者:</P>
<P>float a = 5 / 2.0;</P>
<P>或者:</P>
<P>float a = 5.0 / 2.0;</P>
<P>也就是说,只有除数或被除数至少需要有一个是明确指定为实型,除运算才能得到小数部分。这里我们也更明确类似于5和5.0在计算机中的区别:虽然数值大小一样,但加了5.0被当成实型数对待,而5则被当成整型数。</P>
<P> </P>
<H4><A name=7.1.2>7.1.2</A> 求模运算</H4>
<P>除了 + - * / 以外, % 操作也是C++常用的操作符。% 并不是进行“百分比”的运算。在C和C++里,
% 进行求余数运算,求余数也称“求模”,以下是求余操作的例子:</P>
<P>int a = 5 % 2;</P>
<P>结果是,a 等于 1,即:5 除以2,余数为1。</P>
<P> </P>
<H4><A name=7.1.3>7.1.3</A> 赋值运算</H4>
<P>差点忘了,我们已经很熟悉的等号:= ,C,C++称为赋值操作。看看例子,是不是很熟悉:</P>
<P>int a = 10;</P>
<P>再如:</P>
<P>int b;</P>
<P>b = a;</P>
<P>或:</P>
<P>int c = 12 * 2;</P>
<P> </P>
<P>在C++中,可以使用连等操作:</P>
<P>int a ,b;</P>
<P>a = b = 100;</P>
<P>结果是,a和b都为100。</P>
<H4><A name=7.1.4>7.1.4</A> 自运算</H4>
<P>先来看一个计算机编程中常有的语句例子:</P>
<P> </P>
<P>int a = 10;</P>
<P>a = a + 1;</P>
<P> </P>
<P>上面的代码执行后,结果a的值是11。可能不是很理解 a = a + 1;这种运算。</P>
<P>首先可能会认为,a 和 a + 1 怎么会相等呢?这可是个严重错误,要知道,在C,C++里,'=' 就是表示赋值操作,至于表示左右两值“相等”
的另有符号。因此,a = a + 1,所完成的工作就是:先计算出 a + 1的值,然后将该值赋给a。</P>
<P>假设我们的存款原为a,现在存入1元,那么新的存款就等于旧存款加上1元钱,用编程语言表达,就是 a = a +1;</P>
<P>在C,C++中,这样的自加操作可以有另一种表达,并且用这一种表达,计算机的运算速度比较快。</P>
<P>a = a +1;的另一种运算速度较快的表达方法:</P>
<P>a += 1;</P>
<P>+=
被定义为一种新的操作符(因此+和=要连着,中间不能有空格)。它实现的操作就是将其左边的量在自身的基础上加上右边表达式的值。比如:,假设a原来的值为
10,那么:</P>
<P>a += 2;</P>
<P>执行这一句后,a的值为12,即 a = 10 + 2;</P>
<P> </P>
<P>同样的,减,乘,除,求余都有这种操作符:-= 、 *= 、/=
、%= 等。我们以后学习到的另外一些运算符,也有同样的这种对应运算。举一些例子:</P>
<P>假设在分别进行以下操作之前,a原值都为10。</P>
<P>a -= 2; </P>
<P>执行后,a值为8;(a = 10 - 2)</P>
<P> </P>
<P>a *= 2;</P>
<P>执行后,a值为20;(a = 10 * 2) </P>
<P> </P>
<P>a /= 2;</P>
<P>执行后,a值为5;(a = 10 / 2)</P>
<P> </P>
<P>a %= 2;</P>
<P>执行后,a值为0; (a = 10 % 2)</P>
<P> </P>
<P>C,C++提供这些操作符,目的仅仅是为了提高相应操作的运算速度。为什么 a += 2;会比 a = a +
2;运算得快呢?从编译的角度上看,是因为前者可以生成更短小的汇编代码。</P>
<P>C,C++提供这些别的语言没有的操作符,可以供我们写出优化的代码。</P>
<P>在某些特殊情况下,优化还可以继续。请看下一小节。</P>
<H4><A name=7.1.5>7.1.5</A> ++ 和 -- 运算</H4>
<P>当运算是自加或自减1的时候,C,C++提供了更为优化的运算操作符:++,--。</P>
<P>设整型变量 a,原值为 10。我们已经知道,要实现对其加1,可以有以下两种写法:</P>
<P>方法1: a = a +1;</P>
<P>方法2: a += 1;</P>
<P>我们还知道方法2比方法1好。现在还有方法3,并且是最好的方法。</P>
<P>++a,或者:a++;</P>
<P>也就是说,在只自加1的情况下,代码 a++ 或 ++a 可以生成最优化的汇编代码。</P>
<P> </P>
<P>同样,自减1操作也有对应的操作符:--a 或 a--;</P>
<P>设a原值为10,则执行 --a 或者 a--后,a的值都为9。</P>
<P> </P>
<P>现在来谈谈 ++a 和 a++ 有什么区别。</P>
<P>在C,C++语言里,++a 和 --a 称为前置运算(prefix),而 a++ 和 a--称为后置运算(postfix)。</P>
<P>如果仅仅是进行前置工或后置运算,那么结果是相同的,这我们已经在前面谈过,我们以++为例:设a为10,则无论是 ++a 或
a++,执行结果都是让a递增1,成为11。</P>
<P>但在有其它运算的复杂表达式中,前置++运算过程是:先加1,然后将<B>已加1</B>的变量参以其它运算。后置++的运算过程是:先用<B>未加1</B>的变量参以其它运算,然后再将该变量加1。</P>
<P>听起来有些绕,我们举些例子看,还是变量a,原来值为10:</P>
<P>例子1:</P>
<P>int b = ++a; //前置++</P>
<P>运算结果:a的值为11,b的值也为11。</P>
<P>计算过程解析:</P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -