Unix/Linux C++应用开发-C++运算符

来源:互联网 发布:python 字符串函数 编辑:程序博客网 时间:2024/05/18 10:59

运算符是指用于在操作数上执行某种操作的符号,也就是参与运算的符号,如+(加法运算符)、-(减法运算符)等。运算符的使用通常和表达式是密不可分的,通常作为表达式的一个部分组合计算使用。C++语言中运算符可以分为算术运算符、关系运算符、逻辑运算符、条件运算符等。根据运算符需要的操作数个数不同又可以分为单目运算符(一个操作数)、双目运算符(两个操作数)以及三目运算符(三个操作数)。运算符的学习,主要需要掌握运算符基本功能、优先级以及在程序中组合应用。下面分别讲述几种运算符的基本使用。

4.6.1  算术运算符

C++中算术运算符包括+(加)、-(减)、*(乘)、/(除)、%(取余)以及组合使用的++(自增)和--(自减)共七种。

1.加、减、乘、除法运算符

加、减、乘、除法运算符都属于双目运算符,也就是会有两个操作数参加运算。比如2+3a-b或者a*4a/4等。可以看如下几个表达式定义中使用这几类运算符的实例。

2+3                     //两个整数相加

2.4-4.3               //两个浮点数相减

2*4.3                  //整型数与浮点数相乘

count1/count2  //两个变量值相除(变量可以是整型或者浮点型变量,前提是count2不为零值)

count1+2           //变量和整型常量相加(变量可以是整型或者浮点型变量)

count1*2.1        //变量和浮点型常量相乘(变量可以是整型或者浮点型变量)

使用加、减、乘和除法运算符的操作数可以是整型和浮点型小数中的任意一种,具体使用要根据需求灵活设计。这里需要注意的是减法和除法运算符,通常使用减法运算符时有一个特殊情况,那就是可以当作表示负数使用,比如-9等,此刻该运算符属于单目运算符。另外需要注意的是除法运算符的除数不为零值。

2.取余运算符

%运算符左右的操作数都必须为整型数,否则程序在编译期间会报出错误。取余运算在软件编程中很多场合都非常有用,如判断整数a是不是b的倍数等。

取余运算实际是使用除法运算得出余数作为计算的结果值,比如m%n,其计算过程即为m/n得出的余数。几个表达式中实际定义使用的例子如下所示。

3%2=1               //即为3/2=11

-3%2=-1            //即为 -3/2=1-1

3.自增(++)与自减(--)运算符

自增运算符++使操作数相应的增1++符号可以放置于操作数之前或者之后,基本定义如下所示。

int count = 0;              //定义整型变量count,初始化为值0

++n;

n++;

上述++nn++产生的结果都是使变量n1,基本没有什么区别,等效于n = n + 1语句。++符号前置后置虽然作用都为当前操作数增1,但是在不同的使用场景之下,前置后置++符号其实是有区别的,实际使用实例如下所示。

int n = 0;                               //定义整型变量n,初始化0

int count1,count2;               //定义整型变量count1count2

count1 = ++n;                      //n前置自增1,并将其结果值赋给变量count1

count2 = n++;                     //n后置自增1,并将其结果值赋给变量count2

如上count1 = ++n,该语句先执行++n值得到n1,随后将该值赋给变量count1;对于语句count2 = n++,先执行n++n值依然为0,将其赋给变量count2之后n变量本身值加1后该值变为1。对于前置后置++符号的理解可以总结如下,++符号都会使操作数的值增加1,不同的是当++符号前置该表达式的值等于操作数自增后的值;当++符号后置时,自增表达式的值等于其操作数自增前的值,但操作数本身增1。自减运算符--和自增符++使用方式同等理解即可。

4.6.2  关系运算符

关系运算符号用于测试操作数之间的关系,C++语言提供的关系运算符如表4-2所示。

4-2  基本关系运算符

关系运算符

说明

大于,如a>b即为操作数a值大于b值测试

>=

大于等于,如a>=b即为操作数a值大于等于b值测试

小于,如a<b即为操作数a值小于b值测试

<=

小于等于,如a<=b即为操作数a值小于等于b值测试

==

恒等于,如a==b即为操作数a值恒等于b值测试

!=

不等于,如a!=b即为操作数a值不等于b值测试

关系型的运算符号可以运用在除了C++提供的复数类型外的任意数据类型操作数之间。复数只能使用“==”和“!=”进行是否相等比较,其余关系符号不能使用。

关系运算符通常应用于程序控制结构中的条件判断,常用情形如下所示。

if (count < 0)                                                                       //判断条件count值是否小于0

{

         cout<<”count’svalue less than 0!”<<endl;                   //打印屏幕提示信息

}

else if(count>=0 &&count<=5)                                       //判断条件count值是否在【0-5】之间

{

         cout<<”count’svalue 0-5!”<<endl;                       //打印屏幕提示信息

}

else                                                                                      //默认情况下处理

{

         cout<<”count’svalue greater than 5!”<<endl;

}

while(singleChar != ‘#’)                                                   // singleChar值不为’#’

{

         count++;                                                                    //计数变量自增1

         cin>>singleChar;                                                    //接受用户输入字符

}

对于如上while语句中的字符判断,其实在计算机中是比较的该字符的值,即判断singleChar值是否等于35。关系运算符常用于操作数之间的比较,在控制结构章节以及后续的程序中将会大量使用关系运算符,遇到实际运算情况时再做详细解释。

4.6.3  逻辑运算符

C++语言提供了3种逻辑运算符,分别是逻辑与(&&)、逻辑或(||)和逻辑非(!)。下面通过一个实际程序运行例子学习三个逻辑运算符基本使用情况。

1.准备实例

打开UE工具,创建新的空文件并且另存为chapter0409.cpp。该代码文件随后会同makefile文件一起通过FTP工具传输至Linux服务器端,客户端通过scrt工具访问操作。程序代码文件编辑如下所示。

/**

* 实例chapter0409

* 源文件chapter0409.cpp

* 测试逻辑运算符程序

*/

#include <iostream>

using namespace std;

/*主程序入口*/

int main()

{

         intvalue;                                                                                                //定义整型变量value

         cout<<"pleaseinput a integer value:"<<endl;                                //打印提示输入信息

         cin>>value;                                                                                           //输入整型值

         if(!value)                                                                                                //判断value值非运算后值是否为真

         {

                  cout<<"value is0!"<<endl;                                                                 //条件满足则打印屏幕信息

         }

         elseif(value >0 && value <= 10)                                                      //判断value值是否大于以及小于等于10

         {

                   cout<<"valueis "<<"(0-10]"<<endl;                                         //条件满足则打印屏幕信息

         }

         elseif(value <0 || value >10)                                                             //判断value值是否小于0或大于10

         {

                   cout<<"valueis less than 0 and greater than 10"<<endl;   //条件满足则打印屏幕信息

         }

         return0;

}

上述实例主要用于演示三种逻辑运算符应用情况。逻辑运算符在应用程序条件结构判断中会经常作为条件运算出现,初学者需要弄清楚三种逻辑运算之间的关系与区别。

2.编辑makefile

Linux平台下需要编译源文件为chapter0409.cpp,相关makefile工程文件编译命令编辑如下所示。

OBJECTS=chapter0409.o

CC=g++

 

chapter0409: $(OBJECTS)

    $(CC)$(OBJECTS) -g -o chapter0409

clean:

    rm -fchapter0409 core $(OBJECTS)

submit:

    cp -f -rchapter0409 ../bin

    cp -f -r*.h ../include

上述makefile文件套用前面的模板格式,主要替换了代码文件、程序编译中间文件、可执行程序等。在编译命令部分-g选项的加入,表明程序编译同时加入了可调式信息。

3.编译运行程序

当前shell下执行make命令,生成可执行程序文件,随后通过make submit命令提交程序文件至本实例bin目录,通过cd命令定位至实例bin目录,执行该程序文件运行程序结果如下所示。

[developer @localhost src]$ make

g++ -c -o chapter0409.o chapter0409.cpp

g++ chapter0409.o -g -o chapter0409

[developer @localhost src]$ make submit

cp -f -r chapter0409 ../bin

cp -f -r *.h ../include

[developer @localhost src]$ cd ../bin

[developer @localhost bin]$ ./chapter0409

please input a integer value:

0

value is 0!

以上实例中结合使用了三种逻辑运算符,根据不同的条件判断结果,分别执行不同的分支语句。选择分支语句判断条件!value使用了非逻辑运算符,即当value0值则!value值为真,当value为非0值,则!value值为假。选择分支语句value>0 && value <= 10中间使用了逻辑与运算符,即当两个关系运算表达式条件判断都为真,整个条件判断才为真,执行后续语句。选择分支语句value <0 || value >10中间使用了逻辑或运算符,即当两个关系运算表达式中只要有其一为真即整个条件判断就为真。

4.6.4  条件运算符

C++语言条件运算符用作对一个表达式进行真假判断,根据判断结果决定返回哪个表达式。对于C++条件运算符只有一个,其符号为(?:),基本语法形式如下所示。

<表达式1> ? <表达式2> : <表达式3>

如上所示,程序执行首先对表达式1进行判断,如果该值为真则返回表达式2的值,如果该值为假则返回表达式3的值。下面通过一个实例说明条件运算符的基本使用情况,代码编辑如下所示。

bool flag = 0;                                                   //定义布尔型标记变量flag,并初始化值为0

cout<<(flag>0?"true":"false")<<endl;                   //打印随后条件运算结果

如上实例中,首先定义布尔型变量flag来表示通常软件编程中的标记,随后打印条件运算结果。条件运算中flag大于0作为测试判断条件,如果该条件为真则得出“?”号之后的结果,如果该条件不成立则得出“:”之后的结果值。上述实例中由于flag默认初始化为0,则该条件不成立,直接返回“:”后的“false”字符串结果值。

4.6.5  其它运算符

C++语言除了以上四类运算符以外还提供逗号运算符和赋值运算符。逗号运算符通常用于多表达式语句中,充当表达式之间的分隔符将多个子表达式联合为一个整体的表达式,作为程序中一条语句来执行。例如,定义同类型多个变量、以及后续讲述for循环中多个条件表达式之间都可以使用该运算符来实现子表达式的合并工作。

下面通过几个常见实例,比较清晰直观的了解逗号表达式的基本应用情况,其实现过程如下所示。

int i,j,k;

int value1 = 0,value2 = 0;value3 = 0;

int data ;

data = 10,20,30;

data = (10,20,30);

如上几个小实例中,第一个定义3个整型变量ijk,表达式变量之间通过逗号运算符隔开,类型符号从左向右应用于各个子表达式上。第二个实例定义3个整型变量的同时分别进行了初始化,整体的表达式从左向右依次执行。第三个实例中定义整型变量data,所有在赋值时通过逗号运算符号隔开几个常量值,逗号运算符是一个表示顺序运算的符号,运算顺序自左向右,所以data真正的值为10。而下面的实例中则data中存放的值为30,因为作为一个整体表达式时整个表达式的值由最后一个值决定。

实际软件编程中逗号运算符号作为多个子表达式定义分隔符,在变量定义以及循环结构中多个条件等运用比较常见。如上述实例中逗号表达式作为右值表达式分隔符参与表达式赋值的情况使用很少,因为容易产生歧义,所以尽量避免这类计算情形发生。

赋值运算也是C++编程中使用最频繁的运算符号之一,相当一部分的程序操作中都离不开赋值运算的存在。赋值运算符是优先级仅仅高于逗号的符号,通常用于给表达式赋值的方式参与程序运算。通过如下几个赋值实例,直观了解赋值运算符的基本概念与常见使用方式。

int value;

value = value+3;

value += 3;

char str;

str = ‘c’;

上述几个小实例中,首先定义整型变量value,之后给变量value赋值。由于赋值运算符优先级比较低,则上述表达式中优先计算value+3这样的表达式,所有将该表达式计算的最终结果值赋给value。赋值方式还可以通过“+=”操作数相加后赋值,用来简化该实例中的相加赋值操作。最后定义字符类变量,随后通过赋值运算符将一个字符常量存放到字符变量str中。

赋值运算符通常可以结合算术运算符作简写参与计算,如上述与“+”运算符结合表示表达式赋值操作。除此之外还有“-”、“*”、“/”或“%”等一元类运算符,都可以使用与“=”结合表示运算后赋值操作。

4.6.6  运算符优先级

C++中运算符在应用程序中一般不是孤立参与程序中表达式运算的,往往会结合在一起运用,参与计算机程序计算实现既定的功能。而这些结合在一起的运算符往往计算时有先后的顺序,否则在应用程序中会乱套,程序执行容易出错。

C++语言中针对可能组合使用的运算符提出优先级的概念,即给不同的运算符标上不同的优先级,这样在应用程序中当运算符被组合使用时,编译器可以明确知道按照什么样的顺序来执行程序。运算符优先级可以查阅相关的标准文档中描述,了解基本运算符参与运算时的计算顺序。

下面通过一些运算符参与运算有关优先级情况的实例,了解运算符优先级基本操作情况。

int value1,value2,value3;

value1 = 2*3+4*3;

value1 = 2*(3+4)*3;

value2 = value1 = value3;

while(ch = str[i] != ‘\0’)

while((ch = str[i]) != ‘\0’)

上述几个小实例中,主要演示了基本的几个运算符参与表达式计算时的优先级结合情况。首先定义3个整型变量value1value2value3,随后通过表达式计算2*3+4*3结果为value1赋值。表达式中算术运算基于自左向右计算顺序应该是优先计算2*3,之后结果6+4,最后结果10*330赋给value1。但是实际情况是由于运算符优先级的存在,对于算术运算通常遵循先乘除后加减遇到小括号优先计算小括号中的表达式的四则运算标准。

如上第一个实例中“*/”运算符优先级高于“+-”,所以优先计算2*3值。随后再计算4*3值,最后两个相加赋给value1。第二个实例即使用“()”运算符来强制改变运算符优先级,使之按照开发者真实的意图来参与表达式计算。此时优先计算小括号中的表达式值,即3+4计算结果为7。随后由于运算符表达式计算遵循自左向右的顺序来执行,所以优先计算2*7表达式值。最后在计算14*3表达式值赋给value1变量。

同样第三个实例中while语句结构中条件定义,由于“!=”运算符优先级高于“=”运算符。所以原本计划先将字符串中第i个字符赋给字符变量ch后,再比较是否取到字符串结尾处的思路。此时执行顺序发生了变化。该表达式优先计算了str[i] != ‘\0’,判断是否取到字符串结尾符。如果没有到达字符串结尾则将该字符赋给字符变量ch。为了达到上述最初设想的计算顺序,开发者可以通过小括号来强制运算符执行的优先级。最终达到预想的计算效果。如最后实例中优先执行赋值操作,随后再进行判断对比。

本小节主要简单介绍运算符在软件编程中基本应用及注意点。实际的软件开发中没有必要将运算符优先级熟记于心,也没有必要作大量的复杂容易引起歧义的表达式运算训练。如i+++++等一类的在软件编程中几乎不会去使用的表达式计算练习。通常编程中遇到运算符结合处理时,可以通过小括号来清晰的表达开发者意图,当然基本的运算符操作的结合规律还是需要了解一二。

原创粉丝点击