C++入门(8)数据类型与运算符4)

这篇博客详细介绍了C++中的运算符,包括基础运算符如加减乘除及取余,赋值运算符的使用,以及运算符的优先级。此外,还提到了递增和递减运算符的区别,以及sizeof和size_t运算符的作用。文章强调了在编写复杂表达式时避免混淆和不确定性的编程技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(4)运算符

(1)基础运算符

  • 在C++里,和数学中一样,有很多运算符,甚至比数学中还要丰富。最基础的运算符莫过于加减乘除以及取余(求模),每种运算符都用两个变量或者操作数来计算结果。运算符和操作数构成了表达式。例如:

  • int apples = 2 + 4;

  • 2和4都是操作数,加号是加法运算符,4 + 2则是一个表达式,所以apples = 6。

  • 加(+)减(-)乘(*)除(/)大家应该都明晓了,就不再多说了,这里讲一下取余运算符%。在这里插入图片描述

  • 这个程序很顺畅地说明了取余运算符的用法。比如:19 / 3 = 6,余下1,用取余运算就是:19 % 3 = 1。注意,取余运算时,两个操作数必须都是整数。而除法运算,如 19 / 3 = 6,会有小数部分,但/自动忽略了小数部分,只保留整数部分。但前提两个数都是整型。(这一过程也被称为“截断”)
    赋值运算符

  • 赋值运算符是等于号=。在数学中,这只是一个简单的“相等”,而在计算机中,而非如此。看下面这个:

  • a = 10;

  • 这个式子表示把10赋给a,在数学中,当然可以反过来写:10 = a,但在C++中这是毫无意义的。

  • 再考虑一下这个语句:i = i + 1;显然,在数学中,i左右会被消去,这是毫无意义的,但是在计算机中表示把旧的i值加上1再赋给新的i值。

介绍几个术语

  • 看一下这个表达式:a = 1;

  • 左值:也就是表达式的左边的变量,a,它也被称为“可修改的左值”。右值指可修改的数值,在表达式里指1。看一下下面这个程序:在这里插入图片描述

  • 这里,赋值的顺序是从右向左,先把1赋给c,再给b,再给a。

符号运算符

  • 减号还可以标明或者改变一个值的代数符号。比如:
  a = 12;
  b = -a;
  • 这里b的值就是-12了。这种负号称为一元运算符,它只需要一种运算对象。

(2)运算符的优先级

  • 运算符优先级为表达式求值顺序提供了重要的依据,对于基础的运算符来说,计算机和数学中的运算符优先级是非常类似的,乘除先,加减后,括号里的计算比乘除还要先。比如:在这里插入图片描述

  • 分析一下:程序先计算圆括号内的2+5和6除3,也就成了a = b = -7 * 6 + (4 + 3 * 2);然后程序再计算圆括号内的乘法3*2,得6,再加上4,得10,成了a = b = -7 * 6 + 10;接着,程序计算-7乘6,得-42,再与10相加,得-32,也就是a = b = -32;b=-32之后,再把b的值赋给a,完成计算。

(3)其他运算符
1.递增运算符++和递减运算符–

  • 还有一种运算符,之前也提到过,就是++和–运算符。a++等于a = a + 1,–同理。

  • 但是++有两种形式,一前缀,即++a;一后缀,即a++区别在于递增行为发生的时间不同。请看下面的程序:在这里插入图片描述
    在这里插入图片描述

  • 第一个程序中,a和b输出完全相同,让人以为在循环中,前缀和后缀毫无区别。第二个程序中我们很容易可以发现c的值还是1。可以这么理解:a++是一个运算式,a = a + 1,这个程序中的a就是左边输出的a,而c则是右边旧的a,它没有变化。而++a是一个数值,所以程序中b和d数值一样。

  • 单独使用运算符时,哪种都无所谓,但在循环中最好这么写:

  • while (++a < 6)…

  • 至于–运算符和++运算符极为类似,就不再赘述了。

2.sizeof和size_t运算符

  • 我们在上一节就讲过sizeof运算符,它以字节为单位返回运算对象的大小。一般来说我们要用圆括号把运算对象括起来。如下:在这里插入图片描述

  • sizeof返回size_t类型的值,这是一个无符号整数类型。
    其实还有一些关系运算符,逻辑运算符。。。我们这里就不再多说了,以后讲到会详细介绍。

(3)小提示

  1. 不要自作聪明!!!不要自作聪明!!!不要自作聪明!!!重要的事情说三遍。
  2. 因为一次性在一个表达式中使用太多运算符会让我们糊涂,甚至会让编译器糊涂。比如:
while (num < 21)
{
cout << num << num * num++;
}

这个想法看起来很不错,先计算num的平方值,再把所得值加1。但对于C++来说,++和*的计算是同级的,编译器可能选择先+1或者选择先平方,这是不确定的,这最终会导致输出结果不同(对于不同编译器)。

  1. 所以要遵循以下规则,可避免类似问题:如果一个变量出现再一个函数的多个参数中,不要对该变量使用递增或者递减运算符。
  2. 如果一个变量多次出现在一个表达式中,不要对该变量使用递增或者递减运算符。

侵删

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值