📄 ls07.php
字号:
<P>int b = ++a; //前置++</P>
<P>运算结果:a的值为11,b的值也为11。</P>
<P>计算过程解析:</P>
<P>先计算 ++a,结果a值为11;</P>
<P>然后再计算 b = a;结果b值也为11。</P>
<P> </P>
<P>例子2:</P>
<P>int b = a++; //后置++</P>
<P>运算结果:a的值为11,但b的值为10。</P>
<P>计算过程解析:</P>
<P>先计算 b = a;因此,b的值是未加1之前的a,所以为10;</P>
<P>然后再计算 a++,a的值为11。</P>
<P> </P>
<P>再举一复杂点的表达式:</P>
<P>int a = 10;</P>
<P>int c = 5;</P>
<P> </P>
<P>int b = a++ + c;</P>
<P>执行这些代码,b值为15</P>
<P> </P>
<P>倘若换成:</P>
<P>int a = 10;</P>
<P>int c = 5;</P>
<P>int b = ++a + c;</P>
<P>执行这些代码,b值为16;</P>
<P>想一想,为什么?</P>
<P> </P>
<P>上在举的是++的例子,对于--操作,其计算顺序的规定一样。</P>
<P> </P>
<P>++和--的确能加快运算速度,但它们在前置和后置运算上的微小区别,却很空易让你的代码变得不清晰。更为不好的是,不同的编译器可能会对比有不同的解释,比如VC和BC/CB会对同一代码会有不同的编译结果,造成代码的运行结果也不一样,这是我们应该尽量避免的。所以我们建议在代码尽量不要依赖于前置和后置运算的区别。(尽管它会让你的代码看上去很象“高手”所写)。</P>
<P> </P>
<H3><A name=7.2>7.2</A> 算术类型转换</H3>
<H4><A name=7.2.1>7.2.1</A> 隐式类型转换</H4>
<P>类型转换在C,C++中也属于一种运算。</P>
<P>前面我们举过一个例子:</P>
<P>float a = 5 / 2 ;</P>
<P>还记得a的计算结果吗?上式中,a将得到的值是2。因为在除式 5/2
中,5和2都是整数,所以计算机按整数类型进行了除运算,结果所有的小数位都被丢失了。</P>
<P>我们列出了三种可以解决小数位丢失的方法:</P>
<P>方法1: float a = 5.0 / 2;</P>
<P>方法2: float a = 5 / 2.0;</P>
<P>方法3: float a = 5.0 / 2.0;</P>
<P> </P>
<P>最后一种方法好理解,5.0和2.0都明确指定为实型(double),所以计算结果可以保存小数位。而像第一种:被除数5.0被指定的为实型,但除数2仍然为整型,这两种数据类型的精度不一样,这时,计算机将按哪个类型作为标准呢?</P>
<P> </P>
<P><B>C++遇到两种不同数据类型的数值进行运算时,会将某个数做适当的类型转换,然后再进行转换。转换总是朝表达能力列强的方向进行,并且转换总是逐个运算符进行的。</B></P>
<P> </P>
<P>以下是转换的两条方向线:</P>
<P>char/unsigned char --> short/unsigned short --> int/unsigned int
--> double --> long double</P>
<P>
float --> double -->
long double</P>
<P> </P>
<P>像上面的 a = 5 / 2。计算机先计算5/2,由于
5,2一样是整型,所以计算机不作转换,算出其结果为2,然后赋值给a,因此,就算a是float类型,但仍然只能得到2的结果,而不是2.5。</P>
<P>而 a = 5.0 / 2。计算机在计算 5.0 / 2
时,发现5.0是实型(带小数点),而2是整型,二者不一,所以将2先自动转换成double数,然后现和5.0进行除运算。</P>
<P>这个转换过程,在程序运行时自动进行,称为隐式转换。</P>
<P>隐式(自动)转换尽量使用我们的程序更加合理,但有时它并不能完全符合我们的要求。比如:</P>
<P> </P>
<P>int b = 5, c = 2;</P>
<P>float a = b / c;</P>
<P> </P>
<P>由于除号两边的操作数:b、c都是有明确类型的变量。这时,既不会有隐式转换进行,我们也不能通过加 '.0'来改变其中某个数的数据类型:</P>
<P>float a = b.0 / c.0; //这种写法是错误的,不可能实现。</P>
<P>这种情况下,我们需要显式(强制)类型转换。</P>
<H4><A name=7.2.2>7.2.2</A> 显式类型转换</H4>
<P>显式类型转换也称为强制类型转换。它的语法形式有两种:</P>
<P>形式1 : (类型名) 变量或数值</P>
<P>形式2: 类型名(变量或数值)</P>
<P> </P>
<P>实际例子如:</P>
<P>int b = 5, c = 2;</P>
<P>float a = (float)b / c;</P>
<P>或者:</P>
<P>float a = float(b) / c;</P>
<P>两种写法都可以将变量b强制转换为float类型。</P>
<P>不过,在要转换的数据类型带有修饰符时,则必须使用第一种型式。比如:(unsigned int) a;</P>
<P>其实,两边都加上括号有时更清晰:(unsigned int) (a);</P>
<P> </P>
<H4><A name=7.3>7.3</A> 关系运算</H4>
<P>“关系”运算?听上去很费解。</P>
<P>计算机系一师哥师妹正在处朋友,某晚两人在校园林荫处正在谈情说爱,突然冒出一校监:“说!你俩什么关系?”</P>
<P>果然不愧为计算机系的一对小情侣,以下是他们的回答:</P>
<P>男:“我比她高!”</P>
<P>女:“我比他瘦。”</P>
<P>男:“我比她壮!”</P>
<P>女:“我比他美。”</P>
<P>校监:“我倒!”</P>
<P> </P>
<P>所谓的关系运算,在C,C++语言里,就是比较运算。</P>
<P>算术运算所得的结果是数值,而<B>关系运算所得的结果为逻辑值,也称布尔值</B>。即我们以前所学的bool类型允许的值:真或假。真用true表示,假用false表示。</P>
<P>关系操作符有:</P>
<P>== (比较左右值是否相等)</P>
<P>> (比较左值是否大于右值)</P>
<P>>= (比较左值是否大于或等于右值,也称为不小于)</P>
<P>< (比较左值是否小于右值)</P>
<P><=(比较左值是否小于或等于右值,也称为不大于)</P>
<P>!= (比较左右值是否不相等)</P>
<P> </P>
<P>比较是否相等,使用两个连写的等号表示。因此 == 和 = 是两个不同的概念,后者指赋值运算。</P>
<P>C,C++的不等于用 != 表示,而不是我们更常见的 <>,请大家注意。</P>
<P>下面举一些例子。</P>
<P> </P>
<P>int a = 10;</P>
<P>int b = 9;</P>
<P>则:</P>
<P>a == b+1 运算结果: true;</P>
<P>a == b 运算结果: false;</P>
<P>a > b 运算结果: true</P>
<P>a >= b 运算结果: true;</P>
<P>b > a 运算结果: false;</P>
<P>a >= b+1 运算结果: true;</P>
<P>a <= b+1 运算结果: true;</P>
<P>a != b; 运算结果:true;</P>
<P> </P>
<H4><A name=7.4>7.4</A> 逻辑运算</H4>
<P> </P>
<P>逻辑运算有三个操作符:</P>
<P>! (非,取逻辑反,NOT)</P>
<P>&& (逻辑与,并且,AND)</P>
<P>|| (逻辑或,或者,OR)</P>
<P> </P>
<P>该到考验你是否有资质学习编程的时候了……请回答以下三个问题:</P>
<P> </P>
<P><B><FONT color=#ff0000>......[此处内容不发表在网页,请报名的学员使用<A
href="http://www.bcbschool.com/noused/v4_xiazai.htm"
target=_blank>课程下载器</A>下载完整课程]......</FONT></B></P>
<P> </P>
<P>尽管课程列出了所有可能性,尽管看上去也就这几话,但大家一定要从骨子里头理解这些,不能管背住来解决问题。当我们写程序时,就会发现天天在和一堆的真假判断打交道,如果这些最基本的逻辑操作你不理解,那么就会给解决复杂的逻辑问题带来麻烦。</P>
<P> </P>
<H4><A name=7.5>7.5</A> 表达式</H4>
<P> </P>
<P>变量、常量、各种运算符等组成表达式,用于表达一个计算过程。</P>
<P>比如写一个计算圆面积,我们可以如下表达:</P>
<P> </P>
<P>area = PAI * R * R;</P>
<P>其中,R是某一定义的变量,表示半径,而PAI我们事先定义的一个值为3.14的宏。</P>
<P> </P>
<P>PAI * R * R; 是一个表达式;area = PAI * R *
R;也是一个表达式。表达式组成了C,C++语句,而语句组成C,C++的程序。</P>
<P> </P>
<P>简单的如:3 + 2 ,也是一个表达式。</P>
<P> </P>
<P><B>表达式是操作符、操作数和标点符号组成的序列,用于表达一个计算过程。</B></P>
<P> </P>
<P>对表达式的计算,需要考虑其各计算部分的运算优先级,其中最熟悉莫过于我们小学就学过的“括号优先,先乘除后加减”。</P>
<P>下面列出我们已学过的运算符的优先级:</P>
<P> </P>
<P>按优先级高低排列的运算符:</P>
<P> </P>
<TABLE height=73 width="97%" border=1>
<TBODY>
<TR>
<TD width="19%" height=19>级别</TD>
<TD width="52%" height=19>运算符</TD>
<TD width="58%" height=19>说明</TD></TR>
<TR>
<TD width="19%" height=19>1</TD>
<TD width="52%" height=19>( )</TD>
<TD width="58%" height=19>括号</TD></TR>
<TR>
<TD width="19%" height=17>2</TD>
<TD width="52%" height=17>! +(正号) -(负号) ++ -- sizeof</TD>
<TD width="58%" height=17>+,-在这里不是加减,而是指正负号</TD></TR>
<TR>
<TD width="19%" height=17>3</TD>
<TD width="52%" height=17>* / % </TD>
<TD width="58%" height=17>乘,除,求模(取余)</TD></TR>
<TR>
<TD width="19%" height=17>4</TD>
<TD width="52%" height=17>+ -</TD>
<TD width="58%" height=17>加减</TD></TR>
<TR>
<TD width="19%" height=17>5</TD>
<TD width="52%" height=17>== !=</TD>
<TD width="58%" height=17>等于 不等于判断</TD></TR>
<TR>
<TD width="19%" height=17>6</TD>
<TD width="52%" height=17>&&</TD>
<TD width="58%" height=17>逻辑与</TD></TR>
<TR>
<TD width="19%" height=17>7</TD>
<TD width="52%" height=17>||</TD>
<TD width="58%" height=17>逻辑或</TD></TR>
<TR>
<TD width="19%" height=17>8</TD>
<TD width="52%" height=17>= += *= /= %= </TD>
<TD width="58%" height=17>赋值,自运算操作符</TD></TR></TBODY></TABLE>
<P> </P>
<H4><A name=7.6>7.6</A> 语句</H4>
<P><B><FONT color=#ff0000>......[此处内容不发表在网页,请报名的学员使用<A
href="http://www.bcbschool.com/noused/v4_xiazai.htm"
target=_blank>课程下载器</A>下载完整课程]......</FONT></B></P>
<P> </P>
<P>正是一行行语句组成C,C++程序,结果本章时,我们可以自豪地宣布:我们已经一脚迈入了C++大门的门槛!</P></TD></TR></TBODY></TABLE></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -