網站首頁 編程語言 正文
前言
-a++ ,如果a=3,那么-a++輸出的結果是多少? -3還是-4?
一、首先
先來了解一下算術運算符的優先級和結合性:
運算符 | 優先級 | 結合性 | |
---|---|---|---|
++、--、+(正)、-(負) | 同級 |
高 ^ | | 低 |
右結合 |
*、/、% | 同級 | 左結合 | |
+(加)、-(減) | 同級 | 左結合 |
右結合*、/、%同級左結合+(加)、-(減)同級左結合
在C語言中,計算表達式的值也需要按運算符的優先級從高到低的順序進行計算。
例如,表達式 a+b*c 相當于 a+(b*c).
若操作數兩側運算符的優先級相同,則按結合性(結合方向)決定計算順序,
若結合方向為“從左到右”,則操作數先與左邊的運算符結合;
若結合方向為“從右到左”,則操作數先與右邊的運算符結合;
例如,表達式-a++,- 與 ++ 同級,此時按結合方向決定計算順序(右結合),相當于 -(a++)。
二、其次
我們來運行一下 -a++ 感受一下:
#include <stdio.h>
int main() {
int a = 3;
int b = 5;
printf("%d\n",-a++);
printf("%d\n",a);
printf("%d\n",-++b);
printf("%d\n",b);
return 0;
}
在運行結果出來之前,我們先來猜猜輸出結果是怎樣的? -4? 4 -6? 6 ?如果是這樣的話大概忘記了++前置和后置了?
運行結果:
使用的編譯軟件:CLion
~~~結果有疑惑?請看下方解惑~~~
(初學者提示:下圖中左邊箭頭所指即當前程序運行到這一行,運行到當前行時右邊會有變量當前取值。)
圖1: 此時我們發現 -a++ 中,a的值還是3,這是因為 a++ ,++后置,
所以在這里print 輸出結果是-3,
圖2:在這第6行運行完后,a++生效,也就是a=a+1,這時候a=4,所以在這里第7行運行print輸出的結果是4。
?圖3:這里這個b是為了對比-a++的結果的。-++b,意思是 -(++b),++前置,那么我們先b=b+1,這時候b=6,再走-b的輸出。也就是print 輸出 -6。
?圖4:這里輸出b,此時我們從第9行時b已經++b,因此b=5+1=6,所以在這里輸出為6。
補充:下面講解下3-3的例題
int a = 100; 最開始時a是100。
打印 a++; ?這個printf會打印a++的值,注意是a++表達式的值,看我前面的講解,a++的值就是a的值,也就是100。 別忘了這語句結束后a的值就會自增1(也就是副作用發生了)。
打印 ++a; ?目前a的值為101。現在要打印++a表達式的值,++a的值就等于a+1,所以會打印出102。 此語句后a=101+1=102。
打印 --a; ?這次要打印--a表達式的值,同自增一個道理,--a的值等于a-1,所以會打印出101。 此語句后a=102-1=101。
打印 a--; ?a--表達式的值就是a的值,所以打印出101。 此語句后a=101-1=100。
打印 a+1; ?這表達式與自增無關,只是打印a+1的值,就是101。 對a本身的值沒有影響(加法表達式沒有副作用)。
打印 a; ?這時a的值當然還是100了。
最后
綜上,-a++ ,如果a=3,那么-a++輸出的結果是-3,運算順序還是 -(a++),只是++后置,此時a=a+1要在執行完這一行才執行,如果是++前置,那么也就是 -++a 的情況,那么輸出的結果就是-4。
原文鏈接:https://blog.csdn.net/c_lanxiaofang/article/details/127731465
相關推薦
- 2022-05-17 ribbon和nacos獲取服務列表不一致問題
- 2023-01-07 Python中層次聚類的詳細講解_python
- 2022-10-14 SpringCloud組件之Feign遠程調用
- 2022-10-15 python?FastApi實現數據表遷移流程詳解_python
- 2022-04-04 git: git commit時出現 -modified content, untracked co
- 2023-11-11 微信 小程序 在電腦PC端無法加載的解決辦法。電腦微信小程序打不開是怎么回事?電腦微信小程序不能打開
- 2022-08-07 gRPC超時攔截器實現示例_Golang
- 2022-07-03 axios項目封裝及使用
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支