现在的位置: 首页 > 综合 > 正文

Visual C++ 学习笔记(三)表达式和语句 (转rockybug)

2013年06月08日 ⁄ 综合 ⁄ 共 3414字 ⁄ 字号 评论关闭
 表达式是由操作符、操作数和标点符号序列,其目的是用来说明一个计算过程。
 
左值和右值
左值(left value):出现在赋值表达式的左边的表达式,其作用为存放数据空间,且存放是允许的。缩写:lvalue
右值(right value):只能出现在赋值表达式的右边。缩写:rvalue
左值也可以作为右值表达式,变量可以是左值,也可以为右值,但常量只能是右值。
a=b   // b是变量,在这里是左值,也可以作为右值
a=8   // 8是常量,只能作为右值
(a=4)=28   //  C++语法规定:a=4为左值,28为右值
 
操作符的优先级与结合性
c = a + b           // OK
c = a + + b         // Error
c = a + + + b       // OK a ++ + b
c = a + + + + b     // Error a ++ ++ b
c = a + + + + + b   // Error a ++ ++ + b
操作符自左向右取尽可能多的符号组成运算符,有些操作符的结合性是自右向左的,操作符的其结合性以下表为准。
                           
                             操作符的优先级与结合性
操作符                                                                       结合性
()   []   ->  ::   .                                                        L -> R
!   ~   +   -   ++   --   &   *   (强制转换类型) sizeof new delete        R -> L
.   *   ->   *                                                              L -> R
*   /   %                                                                   L -> R
+-                                                                          L -> R
<<   >>                                                                     L -> R
<   <=   >=   >                                                             L -> R
==   !=                                                                     L -> R
&                                                                           L -> R
^                                                                           L -> R
|                                                                           L -> R
&&                                                                          L -> R
||                                                                          L -> R
?:                                                                          R -> L
=   *=   /=   +=   -=   |=   <<=   >>=                                      R -> L
,                                                                            
(优先级由上至下,结合性 R: Right  L: Left)
 
语句与块
块也被称为复合语句,其含义是指括在一对花括号{}里的语句序列。在语法上,块可以被认为是单个语句。
if...else... 之间只能容纳一条语句,或一个语句块。
if(x>9)
{
   cout << "The number is Perfect." <<endl;
   cout << "It 's large than 9" <<endl;
 }
else
{
   cout << "Not large than 9" <<endl;
 }
 
算术运算和赋值
/ 对于整型数为除法取整操作,对于浮点数则为通常意义的除法。
% 只能对整型数操作,其意义为取余。
+ - * / % 对不同数据类型的操作都不同。
 
赋值缩写:当一变量即出现在表达式左边又出现在表达式右边时,则可以缩写成以下格式
x = x + y    缩写为: x + = y
x = x - y    缩写为: x - = y
x = x * y    缩写为: x * = y
x = x / y    缩写为: x / = y
x = x % y    缩写为: x % = y
 
溢出
发生溢出时由于一个变量被赋予一个超出其数据类型表示范围的数值。
数据溢出不会引起编译错误,只要分母不为0也不会引起除0运行故障,但会使运行结果发生偏差。
当一个变量用一个超过其表示范围的数初始化后,得到的值为该变量范围作模运算后的值。
定义test是短整型,把值40000赋给test时,不会得到40000,而是-25536,下例用补码说明:
short int test = 40000
short int 表示范围(-32768 ~ 32767),长度2字节。得到40000的补码-25536(40000 - 65536)
 
算术类型转换
转换总是朝表达数据能力更强的方向,并且转换总是逐个运算符进行的。
如果一个char型数和一个int型数相加,则将char型数转换成int型数,然后进行运算。
如果一个long int 型数和一个float型数相加,则先将两个数据类型都转换成double型数,然后进行运算。
数据运算过程中自动进行的类型转换称为隐式转换
有时面临计算结果不准确的问题只要将其中一个数标识为其他类型L、((long)强制转换 ),则可以保证其正确。
 
增量和减量
增量和减量的操作符分别表示为:++ 和 -- 。
增量操作表示加1,减量操作相反。
i++ 与 ++i 不同的地方是i++表示先运算后赋值,++i表示先赋值后运算,减量相同。
void _tmain()
{
int a=3;
cout <<a <<endl;
int b=++a;                  // 相当于 a=a+1 , b=a a先自增量,然后赋值给b。
cout <<a <<"  " <<b <<endl;
int c=a++;                  // 相当于 c=a , a=a+1 先赋值给c,然后a再自增量。
cout <<a <<"  " <<c <<endl;
}
 
关系与逻辑运算符
关系操作符
比较( == )、大于( > )、小于( < )、大于等于( <= )、小于等于( >= )、不等于( != )
逻辑运算符
非( ! )、逻辑与( && )、逻辑或( || )
若多个表达式用逻辑与( && )连接,则一个假表达式将使整个连接都为假,C++利用短路表达式的特点产生高效的代码。
 
if...else 语句
if...else语句成对的规则:else连接到上面第一个没有配对且为可见的if上。
 
if()
   if()  //第一个可见,且没有配对的if
   {
if()   //虽然没有配对,但不可见
语句;
}
else
  语句;
 
条件运算符
C++ 中唯一一个3元运算符,它们之间用"?"":"隔开。
语法:(条件表达式)?(条件为真时的表达式):(条件为假时的表达式)
条件运算符可以嵌套:
x>y?"great than":x==y?"equal to":"less than"
等价于
(x>y)?"great than"((x==y)?"equal to":"les than")
条件运算符的嵌套可读性不够好。
由于 << 的优先权高于条件运算符,所以条件运算符构成的表达式要用括号。

抱歉!评论已关闭.