居然不知道和的区别?
前言
那年剛找工作那會,就碰到過這么一個簡單的題目
“&和&&的區別” 那時知識面窄,大概也就知道1.都是作為邏輯與的運算符。2.&&具有短路功能,計算出前者false,就不需計算后者的true or false。后來在微信群里看到有人問類似的問題,引發了我的思考。
&和&&的區別
相同點
&和&&都可作邏輯與的運算符,表示邏輯與(and),當運算符兩邊的表達式的結果都為true時,其結果才為true,否則,只要有一方為false,則結果為false。(ps:當要用到邏輯與的時候&是毫無意義,&本身就不是干這個的)
不同點
if(loginUser!=null&&string.IsnullOrEmpty(loginUser.UserName))- &&具有短路的功能,即如果第一個表達式為false,則不再計算第二個表達式,對于上面的表達式,當loginUser為null時,后面的表達式不會執行,所以不會出現NullPointerException如果將&&改為&,則會拋出NullPointerException異常。(ps:所以說當要用到邏輯與的時候&是毫無意義的)
- & 是用作位運算的。
總結
- &是位運算,返回結果是int類型
- &&是邏輯運算,返回結果是bool類型 what are doing?
讀者黑人問號:我工作三年,你就告訴這點東西,這不是浪費我點擊來閱讀的流量費?
位運算的使用
直接進入主題位運算,這篇文章本身沒有任何難度,工作中甚至用不到位運算,埋個伏筆:
“最高效求出2的3次方"
在掌握位運算之前,應該明確位運算的兩個概念。
- Q1:什么樣的數據類型可以進行位運算?位運算的對象是int 、char 類型。幼兒園式說法就是對二進制的1101(13)進行運算
- Q2:云運算的結果是什么?結果是整型
常見的5個位運算符
| ~ | 邏輯非運算 | 整型、char | 整型 | ~a |
| & | 邏輯與運算 | a&b | ||
| | | 邏輯或運算 | a|b | ||
| << | 位左移運算 | a<<2 | ||
| >> | 位右移運算 | a>>2 |
01 位邏輯與運算:&
& 與運算是將兩個運算對象按位于進行與運算。規則是:
1&1=10&1=0
0&0=0
如圖:15的二進制是(ps:16位int,32位int多打16個0浪費流量)
0000 0000 0000 111120的二進制是
0000 0000 0001 010015&20的結果是4
0000 0000 0000 11110000 0000 0001 0100
結果:
0000 0000 0000 0100在這里插入圖片描述
02 位邏輯或運算:|
|位邏輯或運算是將兩個運算對象按位進行或運算,運算的規則是
1|1=11|0=1
0|0=0
兩位對比有一個1即為1
如15|20的結果計算結果就是31
0000 0000 0000 11110000 0000 0001 0100
結果:
0000 0000 0001 1111
03 位邏輯異或運算: ^
^位邏輯異或運算 是將兩個運算對象按位進行異或運算,規則是:
1異或1等于01異或0等于1
0異或0等于0
即:相同得0,相異得1。15^20= 27(0001 1011)
0000 1111(15)0001 0100(20)
^運算后的結果
0001 1011(27)
04.位邏輯左移運算<<
<<位邏輯左移運算是將按位向左邊移動若干位,左移后空出的部分為0。
比如15的二進制0000 1111 左移8位就是1111 0000 0000
0000 0000 0000 1111>> 左移8位的結果:
0000 1111 0000 0000
15<<8=3840
左移3位(15<<3)就是0111 1000結果是120
a<<1 =2a<<2 =4
a<<3 =8
結論a左移n位就是相當于a乘2的n次方
05 位邏輯右移運算 >>
位邏輯右移運算是將按位向右邊移動若干位,右移后空出的部分為0 比如 0000 1111(15)左移3位(15<<3)就是0000 0001(1)
0000 1111(15)左移3位結果是:
0000 0001(3)
右移相當于整除,右移1位相當于除以2的1次方,右移2相當于除以2的2次方。(ps:這個除法是計算機的除法,你懂得)
06 位運算還能干嘛
位運算的騷操作其實挺多的,篇幅不夠,所以留著下一篇寫。例如:
- 如將一個月的簽到記錄保存到1個int類型中
- 判斷奇偶數
- 權限設置,增刪改查4個操作,合并成一個整型
- 交換兩個數
- 計算2的3次方最高效就是用位運算左移<<
- 計算a的b次方
- 一組整型數據,找出沒有重復的數
?面試官:你們前后端分離的接口規范是什么??程序員:我終于知道post和get的區別?3萬字通俗易懂告訴你什么是.NET?什么是.NET Framework?什么是.NET Core?
?面試官:你連RESTful都不知道我怎么敢要你?
?這幾款谷歌插件還沒安裝??面試官:瀏覽器輸入 URL 回車之后發生了什么?
總結
以上是生活随笔為你收集整理的居然不知道和的区别?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 选择开源项目什么最重要?
- 下一篇: 【DevOps进行时】自动化测试之单元测