C++中出现一排金字塔符号_C语言中的运算符及优先级

算数运算符

  在之前的章节中,我们使用到了+运算符,用于两个数据对象的相加。=运算符,用于将=号右边的值赋值给左边。这一章中,我们将详细认识一下C语言中的运算符。

1. 赋值运算符=

  C语言中,赋值运算符将=号右边的值,赋值给=号左边的变量中。千万不要把=号当做数学中的等于。

  将字面常量100赋值给整型变量a。

int 

TIPS:

  字面常量就是直接写在程序里面的不可变更的数据对象,例如:100,200,"hello",'a'。它们不需要声明,也不能被赋值。


  将字面常量100赋值给整型变量a,将字面常量200赋值给b。a与b相加后的值300,赋值给c。

int 

  下面几种赋值是错误的,字面常量不能被更改。

"Hello" 

2. 加法运算符+

  加法运算符用于将两侧的值相加。100加200,为300。运算符作用于字面常量或变量均可。

int 

3. 减法运算符-

  加法运算符用于将两侧的值相加。a的值等于100减200,为-100。

int 

  请注意,如果需要出现负值,请勿使用unsigned int。虽然,将unsigned int使用%d(有符号整型的转换符)来打印结果仍然是正确的。原因是,有符号和无符号整型数据表示方法一致。因此,使用%d来打印时,仍然可以得到正确的结果。但是,我们这里的类型是unsigned int,应当使用%u,以符合语义化。用%u打印会将最高位符号位看做数据位。所以,当无符号整型装了一个负数的时候,结果应当是溢出。具体原因请参照整型章节。

48aa41098cb0e0d23f12db8c2dfa39f6.png

4. 符号运算符+、-

  符号运算符用于表示一个数值是正数还是负数,它仅需要一个操作数据对象,被称之为一元运算符。而加法运算符、减法运算法,需要两个操作数据对象,被称之为二元运算符。

  符号运算符+,我们一般省略不写+100,就是100。

  a的值+100,被符号运算符-,转换为-100。之后再赋值给a。a的值最后变为-100。

int 

5. 二元运算符与一元运算符

10f7e2e5452ca9790db84a370bdbe92b.png

e5355068fa2b63e5f540e562f767b6a2.png

285390cd77a43fa668463909a5aafb97.png

6. 乘法运算符*

  *是乘法运算符,注意不要用字母x来表示乘法了。

  c的值为10乘10,100。

int 

7. 除法运算符

  /是除法运算符。

int 

  a的值为5,b的值为2。那么5除以2,应该等于2.5。但是,好像用int来接收整型好像不太对。我们把c改为float或double。

int 

c6a30e629626b6f1cc61fb975a841575.png

  结果依然不对呢。我们来看看为什么。a,b都是整型,在C语言里面,整型与整型运算的结果,依然是一个整型,结果的小数部分被丢弃,这一过程被称作截断。a / b后,结果仍然是一个整型,数值已经被截断了,这时候,我们再赋给一个浮点型的c。也只能是整数2转成浮点2.0了,没有起到效果。

2851ffd5223174b8957e1edd527c7afb.png

  那我们将a,b,c都改为float。这样就不会出现截断了。a , b将会进行浮点运算,结果也是一个浮点数类型float。

4f9c0825c2d4c5857be15c1470576de6.png

8. 求余运算符

  %百分号,用于求余。例如:10除以3,等于3余1。

int 

5a90c6d883cb4f609d75196260378166.png

9. 自增、自减运算符

  自增运算符++,和自减运算符--。用于将数据对象加1或减1。这两种运算符有两种形式,前缀模式和后缀模式。首先,我们来看一下前缀模式。++或--放置于数据对象前面。

bc96119d89278316146d3d536b14c42c.png

  a被加了1,b被减了1,很好理解。

  那么我们继续看一下后缀模式。++或--放置于数据对象后面。

24292d034653e4088f6b20839e865c96.png

  后缀模式下,为什么第一次printf打印出来的a和b仍然都是10呢?而第二次打印出来的就是分别加一和减一的结果了。

自增运算符在后缀模式下:返回数据对象原先的值, 并对数据对象进行自增或自减操作。

  不过目前,你可以看做在封号;号前,一定会发生自增、自减。

  那我们来解释一下,为什么第一个printf打印的是10。首先++和--都对a和b进行了自增、自减操作。所以,a的值是11,b是9。但是,++,和--运算符,返回了原先的值,传进了printf。那么,进入printf函数的a和b依然都是10。

  下面的例子中,请记住后缀++或--,其实已经改变了数据对象的值了。但是,它返回并继续参与运算的数值,仍然是原始值。

bb1e56772078a8683c1b67572bbdc633.png

3371dc19bb2538588314b064e8b995c9.png

10. 运算符优先级

  C语言的四则运算符和数学里面的一致。先算括号里面的,先乘除后加减。

5ab61efea7032ebfa7d6a30add269bb2.png

  下表是常用的运算符优先级表格

e2d71c6aec95a6172518f292b6c508ca.png

  优先级越高的,在运算里面,需要被优先处理。例如:乘除优先级为13大于加减的12。

  其中,结合性是指,从左往右运算符还是从右往左运算符。

  12 / 3 * 2,我们应当先算12 / 3得4,之后4 * 2得8。这是从左到右的结合性。

  先算3 * 2得6,再算12 / 6得2,这是从右到左的结合性。显然,乘除应当是从左到右的结合性。

  我们之前常常用到的赋值,为什么先把=号右边的算完,再将结果给左边的变量呢?因为,赋值是一个优先级运算符,并且结合性从右向左的运算符。所以,我们往往先将赋值号右边的优先级高的计算完之后,再算赋值,从右向左,赋给左边的变量。

1f39a7b84758674967ee62533e7f86a0.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值