运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C++内置了丰富的运算符,并提供了以下类型的运算符:
本章将逐一介绍算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和其他运算符。
下表显示了C++支持的算术运算符。
假设变量A的值为10,变量B的值为20,则:
请看下面的实例,了解C++中可用的算术运算符。
复制并粘贴下面的C++程序到test.cpp文件中,编译并运行程序。
当上面的代码被编译和执行时,它会产生以下结果:
Line1-c的值是31Line2-c的值是11Line3-c的值是210Line4-c的值是2Line5-c的值是1Line6-c的值是10Line7-c的值是10关系运算符下表显示了C++支持的关系运算符。
请看下面的实例,了解C++中可用的关系运算符。
复制并黏贴下面的C++程序到test.cpp文件中,编译并运行程序。
Line1-a不等于bLine2-a不小于bLine3-a大于bLine4-a小于或等于bLine5-b大于或等于a逻辑运算符下表显示了C++支持的关系逻辑运算符。
假设变量A的值为1,变量B的值为0,则:
请看下面的实例,了解C++中可用的逻辑运算符。
Line1-条件为真Line2-条件为真Line4-条件不为真Line5-条件为真位运算符位运算符作用于位,并逐位执行操作。&、|和^的真值表如下所示:
假设如果A=60,且B=13,现在以二进制格式表示,它们如下所示:
A=00111100
B=00001101
-----------------
A&B=00001100
A|B=00111101
A^B=00110001
~A=11000011
下表显示了C++支持的位运算符。假设变量A的值为60,变量B的值为13,则:
请看下面的实例,了解C++中可用的位运算符。
Line1-c的值是12Line2-c的值是61Line3-c的值是49Line4-c的值是-61Line5-c的值是240Line6-c的值是15赋值运算符下表列出了C++支持的赋值运算符:
请看下面的实例,了解C++中可用的赋值运算符。
Line1-=运算符实例,c的值=21Line2-+=运算符实例,c的值=42Line3--=运算符实例,c的值=21Line4-*=运算符实例,c的值=441Line5-/=运算符实例,c的值=21Line6-%=运算符实例,c的值=11Line7-<<=运算符实例,c的值=44Line8->>=运算符实例,c的值=11Line9-&=运算符实例,c的值=2Line10-^=运算符实例,c的值=0Line11-|=运算符实例,c的值=2杂项运算符下表列出了C++支持的其他一些重要的运算符。
运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如,乘除运算符具有比加减运算符更高的优先级。
例如x=7+3*2,在这里,x被赋值为13,而不是20,因为运算符*具有比+更高的优先级,所以首先计算乘法3*2,然后再加上7。
下表将按运算符优先级从高到低列出各个运算符,具有较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。在表达式中,较高优先级的运算符会优先被计算。
请看下面的实例,了解C++中运算符的优先级。
对比有括号和没有括号时的区别,这将产生不同的结果。因为()、/、*和+有不同的优先级,高优先级的操作符将优先计算。
zsz***@qq.com
&:只有2个都为1,那么结果是1,否则为0;例如:1&1=1,1&0=0,0&0=0,0&1=0;
11&3=3
00001011&00000011=00000011=3|:只要有一个是1,那么结果为1,否则为0;例如:1&1=1,1&0=1,0&0=0,0&1=1;
11|3=11
00001011|00000011=00001011=11>>:向右位移,就是把尾数去掉位数,例如:153>>2,153的二进制是:10011001,屁股后面去掉2位100110,100110转化成十进制就是38,153=10011001,38=100110,"01"去掉了。
<<:向左位移,就是把开头两位数去掉,尾数加位数00,例如:
107=01101011<<2<<172=10101100在计算机中由于是32位的
107=00000000000000000000000001101011<<2<<428=00000000000000000000000110101100^:两个相同的数会变成0,反之是1,例如:1&1=0,1&0=1,0&0=0,0&1=1;
11^3=8
ccf
130***0664@qq.com
逻辑与&&
&&会先判断左边的值是否为真。
如果为假,那么整个表达式毫无疑问也为假。
如果为真,那就还需要判断右值,才能知道整个式子的值。
这个时候判断右值的过程就起了一个if的作用,可以利用这个过程判断右边表达式是否为真。
下面代码:
/*不用任何循环语句,不用if,来实现1+2+3+...+10的值*/#include 其实与上面的逻辑与&&大同小异。 都是先判断左边是否为真,再来考虑右边。 因为逻辑与||只需要左边为真,那么整个表达式就有值,就不会再去算右边的值了。 所以我们加个!让c值为假时,!c才为真,这样的话逻辑与||还需要判断右边的表达式才能计算出整个表达式的值。 (!c)||(a=add(c-1));这样就达到了和用逻辑与&&时一样的目的。 代码: lhshengshi 510***747@qq.com 除法/和求模%若两个操作数是正数,则除法的结果是正数,求模的结果也是正数若两个操作数是负数,则除法的结果是正数,求模的结果是负数若只有一个操作数是负数,则除法和求模的结果取决于机器,除法可以确定结果是负数逻辑与和逻辑或操作符总是先计算其左操作数,然后再计算其右操作数,只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解其右操作数区分if(i intval=2;if(val==true){//不会进入ifcout<<"val==true"< intival;int*pval;ival=pval=0;//error尽管ival和pval都可以赋值为0strings1,s2;s1=s2="OK"//ok如果指针指向不是用new分配的内存地址,则在该指针上使用delete是不合法的。 通常编译器不能断定一个指针是否指向动态对象,因此尽管这样做是错误的,但在大部分编译器上仍能运行通过,但是会产生运行时错误。整形提升 对于所有比int小的整形(char,signedchar,unsignedchar,short,unsignedshort),如过该类型所有可能值都包含在int中,他们会被提升为int型,否则,他们将被提升为unsignedint。 对于包含signed和unsignedint型的表达式,表达式中的signed型整数会被转换为unsigned型。 tianqixin 429***967@qq.com C++中的-->操作符 以下代码中我们设置了一个x自减的条件运算符代码,在x的进行自减运算前,会先使用比较符号>与右边表达式0进行比较,然后返回结果再进行自减运算: while(x-->0)//相等于以下代码while((x--)>0)//把两个运算符分开更好理解了while(x-->0)实例1:输出0到9的整数 #include 9876543210实例2:输出大于0小于10的偶数 #include 8642实例3 #include cool coo***j@126.com 任何数异或^0得到的值不变: a^0=a任何数异或同一个数两次得到的值不变: zhushengjie zsj***3@163.com 在工作中遇到了一个int的陷阱:当除数和被除数都是整型数据时,得到的结果也是整型数据,它将小数部分舍去,相当于求模运算。 实例1:余数小于0.5时: intN=819;std::cout< 6868.25实例2:余数大于0.5时: intN=819;std::cout<