⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 第7章 运算符、表达式、语句.htm

📁 用非常通俗的语言介绍了C++和C
💻 HTM
📖 第 1 页 / 共 3 页
字号:
      <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:&nbsp; 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 --&gt; short/unsigned short --&gt; int/unsigned int 
      --&gt; double --&gt; long double</P>
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      float&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt; double --&gt; 
      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>&nbsp;“关系”运算?听上去很费解。</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>&gt;&nbsp; (比较左值是否大于右值)</P>
      <P>&gt;= (比较左值是否大于或等于右值,也称为不小于)</P>
      <P>&lt;&nbsp; (比较左值是否小于右值)</P>
      <P>&lt;=(比较左值是否小于或等于右值,也称为不大于)</P>
      <P>!= (比较左右值是否不相等)</P>
      <P> </P>
      <P>比较是否相等,使用两个连写的等号表示。因此 == 和 = 是两个不同的概念,后者指赋值运算。</P>
      <P>C,C++的不等于用 != 表示,而不是我们更常见的 &lt;&gt;,请大家注意。</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 &nbsp; 运算结果: false;</P>
      <P>a &gt; b&nbsp;&nbsp;&nbsp; 运算结果: true</P>
      <P>a &gt;= b&nbsp;&nbsp; 运算结果: true;</P>
      <P>b &gt; a &nbsp;&nbsp; 运算结果: false;</P>
      <P>a &gt;= b+1 运算结果: true;</P>
      <P>a &lt;= b+1 运算结果: true;</P>
      <P>a != b;&nbsp; 运算结果:true;</P>
      <P> </P>
      <H4><A name=7.4>7.4</A> 逻辑运算</H4>
      <P> </P>
      <P>逻辑运算有三个操作符:</P>
      <P>!&nbsp; (非,取逻辑反,NOT)</P>
      <P>&amp;&amp; (逻辑与,并且,AND)</P>
      <P>|| (逻辑或,或者,OR)</P>
      <P> </P>
      <P>该到考验你是否有资质学习编程的时候了……请回答以下三个问题:</P>
      <P> </P>
      <P>1、真 并且 真,结果是真是假?</P>
      <P>2、真 并且 假,结果是真是假?</P>
      <P>3、真 或者 假,结果是真是假?</P>
      <P> </P>
      <P>三道题的答案分别是:真,假,真。</P>
      <P>&amp;&amp; 对应于题目的的“并且”,而 || 对应 “或者”</P>
      <P>当我们需要说,只有条件A和条件B都成立……用C,C++表达即是: A &amp;&amp; B。</P>
      <P>当我们需要说,只要条件A或者条件中成立……,这时表达为:&nbsp; A || B。</P>
      <P> </P>
      <P>如果你是一个女学员,追求者太多让你烦,那么你就可以开出如下条件:</P>
      <P> </P>
      <P>告示:</P>
      <P>凡追我者,请先看以下程序代码(如看懂,请先点击此处到‘<A 
      href="http://www.bcbschool.com/">没有弯路,编程摇篮</A>’报名进修),判断自已是否符合条件,条件符合者,方可得以见本小姐一面:</P>
      <P>a = 富和盖茨有一比;</P>
      <P>b = 帅胜德华留三分;</P>
      <P>见面条件:&nbsp; a &amp;&amp; b;</P>
      <P></P>
      <P>和比尔盖茨一样富<B>并且</B>和刘德华一样帅,这样的人有吗?不管你嫁得出去退不出去,现在你必须牢牢记住:</P>
      <P>表达式:条件1 &amp;&amp; 
      条件2,其运算结果要为真(true),必须条件1和条件2都为真。换言之,二者中有一个为假,那么整体条件就为假。</P>
      <P> </P>
      <P>那么,如果换成或者呢?我们来看看:</P>
      <P>a = 富和盖茨有一比;</P>
      <P>b = 帅胜德华留三分;</P>
      <P>见面条件:&nbsp; a || b;</P>
      <P>事情发生了巨大的变化。现在,有个丑八怪,但却和比尔盖茨一样富,你就得会会他老人家。另外有一穷光蛋,却貌如潘安(假设潘安比德仔帅点),按照条件,你也得去见见。因为你列的条件是:a 
      或者 b,只要其一成立,总体条件即成立。</P>
      <P> </P>
      <P>最后我们来说说“!”。感叹号在C,C++拿来表达“相反”或“非、不”等意思。它的运行很简单:原来为真,加感叹号后为假,原来为假,加感叹号后为真。</P>
      <P> </P>
      <P>下表列出三种逻辑操作符的使用方法:</P>
      <P> </P>
      <TABLE 
      style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt" 
      cellSpacing=0 cellPadding=0 width=633 border=1>
        <TBODY>
        <TR>
          <TD 
          style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid" 
          vAlign=top width=165>
            <P class=MsoNormal><FONT face=宋体 size=3><SPAN 
            style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">符号</SPAN></FONT><SPAN 
            lang=EN-US><O:P> </O:P></SPAN></P></TD>
          <TD 
          style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; mso-border-left-alt: solid windowtext .5pt" 
          vAlign=top width=191>
            <P class=MsoNormal><FONT face=宋体 size=3><SPAN 
            style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">意思</SPAN></FONT><SPAN 
            lang=EN-US><O:P> </O:P></SPAN></P></TD>
          <TD 
          style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; mso-border-left-alt: solid windowtext .5pt" 
          vAlign=top width=231>
            <P class=MsoNormal><FONT face=宋体 size=3><SPAN 
            style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">例子</SPAN></FONT><SPAN 
            lang=EN-US><O:P> </O:P></SPAN></P></TD></TR>
        <TR>
          <TD 
          style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; mso-border-top-alt: solid windowtext .5pt" 
          vAlign=top width=165>
            <P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 12pt"><FONT 
            size=3>&amp;&amp;<O:P> </O:P></FONT></SPAN></P></TD>
          <TD 
          style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" 
          vAlign=top width=191>
            <P class=MsoNormal><FONT face=宋体 size=3><SPAN 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -