<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          學了這么久Java都沒搞懂位運算符

          共 1196字,需瀏覽 3分鐘

           ·

          2022-01-04 14:30

          大家好,我是賀賀,今天跟大家聊聊Java中的位運算符,說起來位運算符不知道你想起了什么,我是想起了二進制。

          常用的運算符

          在Java語言中,官方給我們提供了極為豐富的運算操作,但是常用的,好像也就是算術(shù)運算符,例如加、減、乘、除、取余等。還有就是關(guān)系運算符大于、小于、等于、不等于等。再或者就是邏輯運算符&&、||、!等,至于位運算符,屬實用的不多。用的不多今天為什么拿出來講呢,首先這可以幫助你很好的去理解計算機的底層原理,其次可以讓你在面試中略勝一籌,還有就是有些人分不清邏輯運算符和位運算符的區(qū)別,例如&&和&,||和|,區(qū)別分別是什么,反正剛開始我是有點迷惑,所以這篇文章呢,也算是為自己解惑了。

          位運算符

          位運算符,從字面意思上看,就可以知道,是位運算,其實并不難,只是我們不經(jīng)常用,再加上跟邏輯運算符的混淆,所以就容易讓人迷迷糊糊。這里主要講解&、|、^、~、>>、<<、>>>。其中 ~ 和 >>> 較為復雜。

          &、|、^ 運算符

          &是按位與,|是按位或、^是按位異或,這三種位運算相對簡單,下面給出程序截圖,大家應該可以一目了然。

          ~ 運算符

          首先我們要清楚,數(shù)字在計算機中是以二進制存儲的,準確的說是以二進制的補碼形式存儲的,我們看到的數(shù)一般是以二進制的原碼形式轉(zhuǎn)化為十進制展示的,正數(shù)的原碼、反碼、補碼是其本身,而負數(shù)的反碼是符號位不變,其余取反。負數(shù)的補碼是其反碼+1。這里通過簡單的例子,來解釋原碼、反碼、補碼。
          我們以數(shù)字5為例,這里通過一個字節(jié)來進行講解。5的原碼是00000101,反碼也是00000101,補碼還是00000101,其中在計算機存儲的是補碼。如果對5進行取反是什么呢,5的原碼取反之后是11111010,提醒:(最高位1表示該數(shù)是負數(shù),0表示該數(shù)是正數(shù))。但是計算機中存儲的是補碼,按上面所說的,負數(shù)的補碼是反碼加1。反碼是10000101(負數(shù)的反碼是不改變符號位哦),這里的第一個1就是是表示符號,再加1,就是補碼10000110,也就是我們看到的-6。說明:取反是把所有的1變成0,所有的0變成1,反碼是除了符號位不變,其余的1變0,0變1。

          << 和 >> 運算符

          簡單的理解,<<1 是乘2,>>1是除以2,其中正數(shù)右移是前補0,負數(shù)右移是前補1。這里的運算要比* /的速度快,看JDK原碼的時候,大家應該都見過這些符號。

          >>> 運算符

          這個是無符號右移,什么叫無符號呢,首先說一下什么是有符號右移,有符號右移,也就是,當該數(shù)字是正數(shù),右移前補0,當該數(shù)字是負數(shù),右移前補1。而無符號右移不管是正數(shù)還是負數(shù),都是前補0。這里以-5為例子進行講解,通過無符號右移,負數(shù)變正數(shù)。

          有<<<運算符嗎

          先說結(jié)論,是沒有<<<運算符的,因為我們知道在右移的時候,存在著高位是補0還是補1的選擇,如果是普通的右移,根據(jù)原數(shù)字的正負來決定是補0還是補1,而無符號右移,則高位通通補1。因為高位是決定一個數(shù)的正負的,而在左移的時候,是在最低位補0,高位的數(shù)字是由高位右邊的第一個數(shù)字決定的,所以不存在補0還是補1的情況,所以沒有無符號左移。

          為什么8位是-128 ~ 127

          既然聊到這了,順便解釋一下,為什么占8位的數(shù)字范圍是-128 ~ 127,首先,我們要注意0這個數(shù)是屬于 -128 ~ 127的,也就是說,這一共有256個數(shù)字,而127的二進制表示就是0111 1111,0的二進制是0000 0000,1000 0000,這個按說是-0,但是0和-0是不是就重復了,所以規(guī)定-0就表示-128,也就是1000 0000表示-128,1111 1111這個二進制表示的是-127哦。

          小安的故事

          最后給大家分享一個小故事,小安是一個大一新生,由于高考沒考好,所以在學校和宿舍就比較飄,感覺學校都裝不下他,再怎么說,他也是個大一新生嗎,好多東西都不太懂,時間很快,軍訓就要來了,他喜歡獨來獨往,也不跟室友一起,平時也很晚才回宿舍,就一個人,一天天的不知道在想啥,時間很快,軍訓結(jié)束了。他是計算機專業(yè)的,因為他平時就很飄,所以學編程的時候,也是偷偷的努力,然后驚艷所有人,他聽到的最開心的一句話就是“小安,平時看你不說話,也不學習,沒想到你編程學這么好呀”,其實他的努力只有自己知道,他呢,是個不聰明的人,其實他的努力不配考這么差,就這樣一天一天的過去,他每天過的很充實,很多同學也挺羨慕他,就像他羨慕其他同學一樣。

          瀏覽 60
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  狂插猛操 | 色国产视频 | 日韩无码高清一区 | 成年人黄色网址 | 精品国产视频 |