详解C++编程中运算符的使用

详解C++编程中运算符的使用 C的运算符十分丰富使得C的运算十分灵活方便。例如把赋值号()也作为运算符处理这样abc4就是合法的表达式这是与其他语言不同的。C提供了以下运算符算术运算符(加) -(减) *(乘) /(除) %(整除求余) (自加) --(自减)关系运算符(大于) (小于) (等于) (大于或等于) (小于或等于) !(不等于)逻辑运算符(逻辑与) ||(逻辑或) !(逻辑非)位运算符(按位左移) (按位右移) (按位与) |(按位或) ^(按位异或) ~(按位取反)赋值运算符 (及其扩展赋值运算符)条件运算符 (?:)逗号运算符 (,)指针运算符 (*)引用运算符和地址运算符 ()求字节数运算符(sizeof)强制类型转换运算符( (类型) 或类型( ))成员运算符 (.)指向成员的运算符 (-)下标运算符 ([ ])其他 (如函数调用运算符())基本的算术运算符在本章中主要介绍算术运算符与算术表达式赋值运算符与赋值表达式逗号运算符与逗号表达式其他运算符将在以后各章中陆续介绍。需要说明两个整数相除的结果为整数如5/3的结果值为1舍去小数部分。但是如果除数或被除数中有一个为负值则舍入的方向是不固定的。例如-5/3在有的C系统上得到结果-1有的C系统则给出结果-2。多数编译系统采取“向零取整”的方法即5/3的值等于1-5/3的值等于-1取整后向零靠拢。如果参加, -, *, / 运算的两个数中有一个数为float型数据则运算的结果是double型因为C在运算时对所有float型数据都按double型数据处理。算术表达式和运算符的优先级与结合性用算术运算符和括号将运算对象也称操作数连接起来的、符合C语法规则的式子称C算术表达式。运算对象包括常量、变量、函数等。例如下面是一个合法的C算术表达式1a*b/c-1.5aC语言规定了运算符的优先级和结合性。在求解表达式时先按运算符的优先级别高低次序执行例如先乘除后加减。如有表达式a-b*cb的左侧为减号右侧为乘号而乘号优先于减号因此相当于a-b*c。如果在一个运算对象两侧的运算符的优先级别相同如a-bc则按规定的“结合方向”处理。C规定了各种运算符的结合方向结合性算术运算符的结合方向为“自左至右”即先左后右因此b先与减号结合执行a-b的运算再执行加c的运算。“自左至右的结合方向”又称“左结合性”即运算对象先与左面的运算符结合。以后可以看到有些运算符的结合方向为“自右至左”即右结合性例如赋值运算符。关于“结合性”的概念在其他一些高级语言中是没有的是C和C的特点之一希望能弄清楚。表达式中各类数值型数据间的混合运算在表达式中常遇到不同类型数据之间进行运算如110a1.5-8765.1234*b在进行运算时不同类型的数据要先转换成同一类型然后进行运算。转换的规则按图所示。假设已指定i为整型变量f为float变量d为double型变量e为long型有下面表达式110ai*f-d/e运算次序为进行10a的运算先将a转换成整数97运算结果为107。进行i*f的运算。先将i与f都转换成double型运算结果为double型。整数107与i*f的积相加。先将整数107转换成双精度数小数点后加若干个0即107.000…00结果为double型。将变量e转换成double型d/e结果为double型。将10ai*f的结果与d/e的商相减结果为double型。上述的类型转换是由系统自动进行的。C自增和自减运算符(--和)在C和C中常在表达式中使用自增和自减--运算符他们的作用是使变量的值增1或减1如i在使用i之前先使i的值加1如果i的原值为3则执行ji后j的值为4--i 在使用i之前先使i的值减1如果i的原值为3则执行j--i后j的值为2i 在使用i之后使i的值加1如果i的原值为3则执行ji后j的值为3然后i变为4i--在使用i之后使i的值减1如果i的原值为3则执行ji--后j的值为3然后i变为2i是先执行ii1后再使用i的值;而i是先使用i的值后再执行ii1。正确地使用和--可以使程序简洁?清晰?高效。请注意自增运算符和自减运算符--只能用于变量而不能用于常量或表达式。和--的结合方向是“自右至左”。自增运算符和自减运算符--使用十分灵活但在很多情况下可能出现歧义性产生“意想不到”的副作用。自增减运算符在C程序中是经常见到的常用于循环语句中使循环变量自动加1。也用于指针变量使指针指向下一个地址。