文章目錄
前文傳送門,dotNET開發基礎彙總系列
StackOverflow 20萬閱讀的問題:如何實現異步Task超時的處理
Func和Action委託簡單用法
C#異步編程基礎入門總結
C#泛型入門學習泛型類、泛型集合、泛型方法、泛型約束、泛型委託
C#異常處理總結
Try-Catch無法正確定位異常位置,我推薦2個有效技巧
推薦20套實戰源碼
01 前言
那年剛找工作那會,就碰到過這麼一個簡單的題目1.都是作爲邏輯與的運算符。2.&&具有短路功能,計算出前者false,就不需計算後者的true or false。後來在微信羣裏看到有人問類似的問題,引發了我的思考。
02 &和&&的區別
相同點
&和&&都可作邏輯與的運算符,表示邏輯與(and),當運算符兩邊的表達式的結果都爲true時,其結果才爲true,否則,只要有一方爲false,則結果爲false。(ps:當要用到邏輯與的時候&是毫無意義,&本身就不是幹這個的)
不同點
if(loginUser!=null&&string.IsnullOrEmpty(loginUser.UserName))
- &&具有短路的功能,即如果第一個表達式爲false,則不再計算第二個表達式,對於上面的表達式,當loginUser爲null時,後面的表達式不會執行,所以不會出現NullPointerException如果將&&改爲&,則會拋出NullPointerException異常。(ps:所以說當要用到邏輯與的時候&是毫無意義的)
- & 是用作位運算的。
總結
-
&是位運算,返回結果是int類型
-
&&是邏輯運算,返回結果是bool類型 what are doing?
讀者黑人問號:我工作三年,你就告訴這點東西,這不是浪費我點擊來閱讀的流量費?
03 位運算的使用
直接進入主題位運算,這篇文章本身沒有任何難度,工作中甚至用不到位運算,埋個伏筆:
在掌握位運算之前,應該明確位運算的兩個概念。
-
Q1:什麼樣的數據類型可以進行位運算?位運算的對象是int 、char 類型。幼兒園式說法就是對二進制的1101(13)進行運算
-
Q2:雲運算的結果是什麼?結果是整型
常見的5個位運算符
符號 | 意義 | 運算對象類型 | 運算結果類型 | 示例 |
---|---|---|---|---|
~ | 邏輯非運算 | 整型、char | 整型 | ~a |
& | 邏輯與運算 | a&b | ||
| | 邏輯或運算 | a|b | ||
<< | 位左移運算 | a<<2 | ||
>> | 位右移運算 | a>>2 |
3.1 位邏輯與運算:&
& 與運算是將兩個運算對象按位於進行與運算。規則是:
1&1=1
0&1=0
0&0=0
如圖:15的二進制是(ps:16位int,32位int多打16個0浪費流量)
0000 0000 0000 1111
20的二進制是
0000 0000 0001 0100
15&20的結果是4
0000 0000 0000 1111
0000 0000 0001 0100
15&20 結果:
0000 0000 0000 0100
3.2 位邏輯或運算:|
| 位邏輯或運算是將兩個運算對象按位進行或運算,運算的規則是
1|1=1
1|0=1
0|0=0
兩位對比有一個1即爲1
如15|20的結果計算結果就是31
0000 0000 0000 1111
0000 0000 0001 0100
15|20結果
0000 0000 0001 1111
3.3 位邏輯異或運算: ^
^ 位邏輯異或運算 是將兩個運算對象按位進行異或運算,規則是:
1異或1等於0
1異或0等於1
0異或0等於0
即:相同得0,相異得1。15^20= 27(0001 1011)
0000 1111(15)
0001 0100(20)
15^20運算後的結果
0001 1011(27)
3.4 位邏輯左移運算<<
<< 位邏輯左移運算是將按位向左邊移動若干位,左移後空出的部分爲0。
比如15的二進制0000 1111 左移8位就是1111 0000 0000
0000 0000 0000 1111
15>> 左移8位的結果:
0000 1111 0000 0000
15<<8=3840
左移3位(15<<3)就是0111 1000結果是120
a<<1 =2
a<<2 =4
a<<3 =8
結論 a左移n位就是相當於a乘2的n次方
3.5 位邏輯右移運算 >>
位邏輯右移運算是將按位向右邊移動若干位,右移後空出的部分爲0 比如 0000 1111(15)左移3位(15<<3)就是0000 0001(1)
0000 1111(15)
左移3位結果是:
0000 0001(3)
右移相當於整除,右移1位相當於除以2的1次方,右移2相當於除以2的2次方。(ps:這個除法是計算機的除法,你懂得)
04 位運算還能幹嘛
位運算的騷操作其實挺多的,篇幅不夠,所以留着下一篇寫。例如:
-
如將一個月的簽到記錄保存到1個int類型中
-
判斷奇偶數
-
權限設置,增刪改查4個操作,合併成一個整型
-
交換兩個數
-
計算2的3次方最高效就是用位運算左移<<
-
計算a的b次方
-
一組整型數據,找出沒有重複的數
關於其他的一些基礎知識概念的總結:
位、字節、字符(英文字母)、漢字、KB、MB、GB、TB的關係
- 位:bit,也叫比特位,是計算機表示數據最小的單位,用二進制0和1來存儲
- 字節:byte,1byte(1B)=8b,一個字節=8位
- 字符:char,1char=2byte=16b,1個字符=2個字節=16位
- KB,1KB=1024byte(1024B)
- MB,1MB=1014KB
- GB,1GB=1024MB
- TB,1TB=1024GB
- 一個漢字佔兩個字節,也就是32位,一篇1000字的文章,大概就是32*1000 的二進制0或1 。
- 一個10M的短視頻,也就是10M=1024KB10=1024字節1010=1024b10108
大概就是919200個二進制的0和1了 - short 是16位,int是32位,long是64位KB,1KB=1024byte(1024B)
short 、int 、long之間能組合、互轉嗎?
其他的一些實際操作的鏈接,看往期,寫的比較亂,見諒!
C#位運算使用場景之操作整型某一位
C#位運算實際運用
作者信息:
【文章信息】:作者-張林:原文鏈接-https://blog.csdn.net/kebi007/article/details/103175193
【原創公衆號】:dotNet全棧開發。好文目錄
版權聲明:本文爲CSDN博主「dotNet全棧開發」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。