76.算术运算符

发布时间 2023-03-29 19:32:32作者: CodeMagicianT

算术运算符

对大多数运算符来说,布尔类型的运算对象将被提升为int类型。

当作用于算术类型的对象时,算术运算符+、一、*、/的含义分别是加法、减法、乘法和除法。整数相除结果还是整数,也就是说,如果商含有小数部分,直接弃除:

int ival1 = 21/6;//ival1是3,结果进行了删节,余数被抛弃掉了
int ival2 = 21/7;//ival2是3,没有余数,结果是整数值

运算符%俗称“取余”或“取模”运算符,负责计算两个整数相除所得的余数,参与取余运算的运算对象必须是整数类型:

int ival = 42;
double dval = 3.14;
ival % 12;//正确:结果是6
ival % dval;//错误:运算对象是浮点类型

  在除法运算中,如果两个运算对象的符号相同则商为正(如果不为0的话),否则商为负。C++语言的早期版本允许结果为负值的商向上或向下取整,C++11新标准则规定商一律向0取整(即直接切除小数部分)。

  根据取余运算的定义,如果m和n是整数且n非o,则表达式(m/n)*n+m%n的求值 结果与m相等。隐含的意思是,如果m%n不等于0,则它的符号和m相同。C++语言的早期版本允许m%n的符号匹配n的符号,而且商向负无穷一侧取整,这一方式在新标准中已经被禁止使用了。除了-m导致溢出的特殊情况,其他时候(-m)/n和m/(-n)都等于 -(m/n),m%(-n)等于m%n,(-m)%n等于-(m%n)。具体示例如下:

21%6; /*结果是3 */    21/6; /*结果是3 */
21%7; /*结果是0 */    21/7; /*结果是3 */
-21%-8; /*结果是-5 */    -21/-8; /*结果是-2 */
21%-5; /*结果是1 */    21/-5; /*结果是-4 */