前言:
上學沒好好上,工作幾年位運算也不知道怎麼回事,最近學算法遇到不理解,因此補習一下。以下爲個人學習中的理解,畢竟是小白。有錯誤的還請指出。
(1)二進制轉換方法
不要笑話我二進制轉換都忘了,在這裏介紹一下二進制與十進制互轉方法:
18轉二進制:
理解方法:18>16 在下面畫1,18-16=2。2不大於8和4,繼續往左移。2-2=0,在2的下面畫1。最終得到:10010
反轉:按照給的二進制數,按照從左到右填寫。再進行相加。結果:2+16=18;
之所以要轉成二進制是方便電腦讀取,它代表了電子的兩個狀態,on和off;
(2) 理解原碼、反碼和補碼
原碼:原碼錶示法在數字前面增加了一位符號位,即最高位爲符號位,正數位該位爲0,負數位該位爲1.比如十進制的5如果用8個二進制位來表示就是00000101,-5就是10000101。
反碼:正數的反碼是其本身,負數的反碼在其原碼的基礎上,符號位不變,其餘各個位取反。5的反碼就是00000101,而-5的則爲11111010。
補碼:正數的補碼是其本身,負數的補碼在其原碼的基礎上,符號位不變,其餘各位取反,最後+1。即在反碼的基礎上+1。5的反碼就是00000101,而-5的則爲11111011。
(3)位運算符
舉例1:9&7 1001對比111 爲:1
舉例二:9|7 結果爲:1111。再轉化爲十進制爲15;
舉例三:2<<1,表示2左移1位。2的十進制爲10 ,左移一位爲:100。再轉化爲十進制結果爲:4.
舉例四:3>>1,表示3右移1位,一列的例外。3的十進制爲11,右移一位爲:1.1。因爲位運算只對整數有效,所以會省略小數點後的數。最終結果爲:1;
舉例五:一個數據對另一個數據位異或兩次,該數本身不變。10^ 20 ^20 結果爲10;
Java相關位運算應用