這篇文章主要為大家展示了“Java位運算符有什么用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Java位運算符有什么用”這篇文章吧。
在Java語言中,官方給我們提供了極為豐富的運算操作,但是常用的,好像也就是算術運算符,例如加、減、乘、除、取余等。還有就是關系運算符大于、小于、等于、不等于等。再或者就是邏輯運算符&&、||、!等,至于位運算符,屬實用的不多。用的不多今天為什么拿出來講呢,首先這可以幫助你很好的去理解計算機的底層原理,其次可以讓你在面試中略勝一籌,還有就是有些人分不清邏輯運算符和位運算符的區別,例如&&和&,||和|,區別分別是什么,反正剛開始我是有點迷惑,所以這篇文章呢,也算是為自己解惑了。
位運算符,從字面意思上看,就可以知道,是位運算,其實并不難,只是我們不經常用,再加上跟邏輯運算符的混淆,所以就容易讓人迷迷糊糊。這里主要講解&、|、^、~、>>、<<、>>>。其中 ~ 和 >>> 較為復雜。
&是按位與,|是按位或、^是按位異或,這三種位運算相對簡單,下面給出程序截圖,大家應該可以一目了然。
首先我們要清楚,數字在計算機中是以二進制存儲的,準確的說是以二進制的補碼形式存儲的,我們看到的數一般是以二進制的原碼形式轉化為十進制展示的,正數的原碼、反碼、補碼是其本身,而負數的反碼是符號位不變,其余取反。負數的補碼是其反碼+1。這里通過簡單的例子,來解釋原碼、反碼、補碼。
我們以數字5為例,這里通過一個字節來進行講解。5的原碼是00000101,反碼也是00000101,補碼還是00000101,其中在計算機存儲的是補碼。如果對5進行取反是什么呢,5的原碼取反之后是11111010,提醒:(最高位1表示該數是負數,0表示該數是正數)。但是計算機中存儲的是補碼,按上面所說的,負數的補碼是反碼加1。反碼是10000101(負數的反碼是不改變符號位哦),這里的第一個1就是是表示符號,再加1,就是補碼10000110,也就是我們看到的-6。說明:取反是把所有的1變成0,所有的0變成1,反碼是除了符號位不變,其余的1變0,0變1。
簡單的理解,<<1 是乘2,>>1是除以2,其中正數右移是前補0,負數右移是前補1。這里的運算要比* /的速度快,看JDK原碼的時候,大家應該都見過這些符號。
這個是無符號右移,什么叫無符號呢,首先說一下什么是有符號右移,有符號右移,也就是,當該數字是正數,右移前補0,當該數字是負數,右移前補1。而無符號右移不管是正數還是負數,都是前補0。這里以-5為例子進行講解,通過無符號右移,負數變正數。
先說結論,是沒有<<<運算符的,因為我們知道在右移的時候,存在著高位是補0還是補1的選擇,如果是普通的右移,根據原數字的正負來決定是補0還是補1,而無符號右移,則高位通通補1。因為高位是決定一個數的正負的,而在左移的時候,是在最低位補0,高位的數字是由高位右邊的第一個數字決定的,所以不存在補0還是補1的情況,所以沒有無符號左移。
為什么8位是-128 ~ 127
既然聊到這了,順便解釋一下,為什么占8位的數字范圍是-128 ~ 127,首先,我們要注意0這個數是屬于 -128 ~ 127的,也就是說,這一共有256個數字,而127的二進制表示就是0111 1111,0的二進制是0000 0000,1000 0000,這個按說是-0,但是0和-0是不是就重復了,所以規定-0就表示-128,也就是1000 0000表示-128,1111 1111這個二進制表示的是-127哦。
以上是“Java位運算符有什么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。