1. 程式人生 > >java獲取一個數的二進位制的某位

java獲取一個數的二進位制的某位

遇到的需求:給我一個byte型別的數,然後獲取二進位制的第一位第二位,第三位第四位,第五位第六位,第七位第八位..
其實就是把一個十進位制的數轉換為二進位制,然後分為四段拆分。

java 中byte佔1個位元組,1個位元組八位,並且是有符號的,要想是沒有符號得自己處理一下,byte & 0xff
或者 if(bye <0) byte+256

進入正題,把byte數拆分為4個
比如一個bye數是
239
轉換為二進位制
11101111
則要拆分為
11 10 11 11

二進位制轉換為十進位制
1*2^0 + 1* 2^1 +1*2^2 + 1*2^3 + 0*2^4 + 1*2^5 +1*2^6 +1*2^7 =
1 + 2 + 4 + 8 + 0 +32 +64 + 128 = 239

這個當中我想肯定是要使用 >>(右移)和<<(左移)的運算的.但沒想到利用2的權重

1110 1111 >>1 = 0111 0111 = 119 和java程式中的 239 /2 = 119 是相等的
1110 1111 >>2 = 0011 1011 = 59 和java程式中的 239/2/2 = 59是相等的
其實這個和2的權重有關(二進位制轉十進位制的換算),
也就是說右移1位 等於 十進位制數除以2
右移兩位就是 除以2的2次方,以此類推
左移1位就是乘以2,左移兩位就是乘以2的二次方,以此類推

單單是上面的操作並不能獲取二進位制的某位,最多也就是左移和右移
要想可以獲取到某位上的數,使用%(求餘)

十進位制:239
轉換為二進位制
1110 1111
獲取二進位制的第七第八位,右移6位:239/ Math.pow(2, 6)
獲取二進位制的第五第六位: (239/ 16) % 4
這裡對4求餘是保留低兩位,保留低一位就對2求餘,保留低兩位就是對2的2次方求餘,這個也是利用了權重
這裡寫圖片描述

獲取二進位制的第三第四位: (239 / 4) % 4
獲取二進位制的第一第二位: 239% 4