網站首頁 編程語言 正文
前言:在我們程序編寫領域,操作符給我們提供了很多的運算便利,但操作符琳瑯滿目,我們要怎樣用好它們呢,下面就帶你來熟悉熟悉這些多樣的操作符。
操作符分類:
算術操作符 、移位操作符 、位操作符 、賦值操作符 、單目操作符 、關系操作符 、邏輯操作符 、條件操作符 、逗號表達式 、下標引用、函數調用和結構成員
1.算數操作符(+、--、*、%、/)
這里我們著重講一下取余(模)%操作符和除法/操作符
#include<stdio.h> int main() { //取余(模)、除法 int ret1 = 10 % 3;//取余(模),得到的結果是相除之后的余數 int ret2 = 10 / 3;//除法-得到的結果是商 printf("ret1=%d\nret2=%d\n", ret1, ret2); //當/(除號)兩端都是整數的時候,執行的是整數除法 //當兩端只要有一個浮點數,執行的就是浮點數的除法 double ret = 10.0 / 3; printf("%lf\n", ret); return 0; }
2.移位操作符(左移<< 和 右移>>)
這里注意!!!
移位操作符的操作數只能是整數,整數在內存中存的是補碼,但最后輸出的,也就是我們看到的,是原碼。
(1)左移
#include<stdio.h> int main() { //2.移位操作符 //左移 int a = 5; //把a在內存中存儲的二進制位向左移動2位 int b = a << 2; printf("%d\n", b); printf("%d\n", a); }
?計算演示:
(2)右移
分為算數右移和邏輯右移,具體是哪種右移取決于編譯器。
算數右移:右邊丟棄,左邊補原來的符號位(負數右移幾位左邊就添幾個1)
邏輯右移:右邊丟棄,左邊補0
(常見的編譯器都是算數右移)
#include<stdio.h> int main() { int a = 5; int b = a >> 2; printf("%d\n", b); return 0; }
3.位操作符
我們直接上代碼
#include<stdio.h> int main() { int a = 3; int b = -5; int x = a & b; int y = a | b; int z = a ^ b; printf("%d %d %d", x, y, z); return 0; }
(1)按位與&
相同為1,不同為0
(2)按位或
只要有1則為1,兩個同時為0才為0
(來個例題)
不能創建臨時變量(第三個變量),實現兩個數的交換
第一種,采用算數操作符來解決
#include<stdio.h> int main() { int a = 3, b = 5; printf("交換前:a=%d b=%d\n", a, b); a = a + b;//a+b=8 b = a - b;//此時的a=8,b還是5,則b=8-5=3,也就是之前的a a = a - b;//次時的a還是8,而b已經賦值為3,所以這時的a=8-3=5,也就是之前的b printf("交換后:a=%d b=%d\n", a, b); return 0; }
?但是這種方法不夠完美,當a很大,b也很大的時候,則放不進整型里面,存在溢出問題,不能解決所有問題。那么我們就來看下第二種方法:使用異或
(相同的異或為0,任何數與0異或還是原的數)
#include<stdio.h> int main() { int a = 3, b = 5; printf("交換前:a=%d b=%d\n", a, b); a = a ^ b; b = a ^ b;//相當于a^b^b=a a = a ^ b;//相當于a^b^a(此時的b=a)=b printf("交換后:a=%d b=%d\n", a, b); return 0; }
?但是這個方法的可讀性不高,也存在缺陷,如果你有更好的方法記得告訴博主哦!
4.賦值操作符
(1)=,沒什么好講的
這里要提一點,連續賦值(不提倡),但要注意的是等號兩邊不能同時為常量
(2)復合賦值符
+= :a=a+b可以寫成a+=b
?-= :a=a-b可以寫成a-=b
*= :a=a*b可以寫成a*=b
下面以此類推
/= 、%= 、>>= 、<<= 、&= 、|= 、^=
好啦,操作符詳解的上篇今天就到這了,敬請期待下篇!!!
原文鏈接:https://blog.csdn.net/m0_56064145/article/details/121471999
相關推薦
- 2022-10-13 C++?auto自動類型推導規則和使用詳解_C 語言
- 2022-09-23 C#實現目錄跳轉(TreeView和SplitContainer)的示例代碼_C#教程
- 2022-01-06 node的淘寶鏡像下載路徑cnpm
- 2022-07-10 fastmock使用-只能模擬get請求
- 2022-06-12 查看docker中運行的JVM參數問題及解決方法_docker
- 2022-04-09 SpringBoot 安全漏洞之SQL注入解決方案
- 2022-12-23 C++多線程之帶返回值的線程處理函數解讀_C 語言
- 2022-09-03 C++日期類(Date)實現的示例代碼_C 語言
- 最近更新
-
- 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同步修改后的遠程分支