用二進位制去控制分享
案例:
做分享功能,分享功能需求是這樣的,可以分享到:自己的APP廣場,自己的APP中的好友,群組、微信、朋友圈、微博、QQ,QQ空間八個平臺。現在要根據伺服器過來的引數判斷哪些需要顯示,哪些不用顯示。比如引數名稱叫int shareStatu。
我以前的解決方案可能是:1代表群組顯示,2代表群組和微信都顯示按照值去判斷。
也可以每個都定義一個變數比如:isShowGroup boolean
但是都比較麻煩
今天才學到的一個技巧
上面相當於是開關係統,許可權系統。用二進位制的每一位表示一個功能,0表示關,1表示開,比如:11111111表示所有的功能全開。第一位表示廣場,第二位表示群組,第三位表示私信,第四位表示微信,第五位表示朋友圈,第六位表示微博,第七位表示QQ,第八位表示QQ空間。和伺服器定義好協議以後,10000000就表示只有QQ空間可以分享,其他功能隱藏。1表示只有廣場可以分享,其他隱藏。
那麼這個二進位制如何在程式碼裡去判斷第幾位是1或者0呢,這一這麼算:
二進位制在java裡以0b開頭,比如1用二進位制在java裡表示為0b1.
如果要判斷第一位是否為1,則可以表示為shareStatu & 0b1 == 1,使用到了與運算,意思就是用前面的和後面的二進位制數與,如果相同位都是1則為1,否則為0,這樣比如shareStatu=3,也就是011,011&001=001=1.
如果要判斷第三位是否為1也就是是否可分享到私信,比如shareStatus=5,也就是101,因為要判斷第三位所以使用與的數也要為第三位為1,則為100,那麼與運算:101&100=100=4,除了判斷第一位,其他位都需要使用位移運算子>>,101&100>>2=1,>>意思是所有位向右移動,這時候就可以判斷是否等於1了,也就是:shareStatu&0b100>>2 == 1.
這裡需要注意的是,位移運算子的計算優先順序要高於其他,所以正確的表示式應該是這樣 boolean isOpen = ((shareStatu & 0b100) >> 2 == 1)
剛學到的,分享一下。
做分享功能,分享功能需求是這樣的,可以分享到:自己的APP廣場,自己的APP中的好友,群組、微信、朋友圈、微博、QQ,QQ空間八個平臺。現在要根據伺服器過來的引數判斷哪些需要顯示,哪些不用顯示。比如引數名稱叫int shareStatu。
我以前的解決方案可能是:1代表群組顯示,2代表群組和微信都顯示按照值去判斷。
也可以每個都定義一個變數比如:isShowGroup boolean
但是都比較麻煩
今天才學到的一個技巧
上面相當於是開關係統,許可權系統。用二進位制的每一位表示一個功能,0表示關,1表示開,比如:11111111表示所有的功能全開。第一位表示廣場,第二位表示群組,第三位表示私信,第四位表示微信,第五位表示朋友圈,第六位表示微博,第七位表示QQ,第八位表示QQ空間。和伺服器定義好協議以後,10000000就表示只有QQ空間可以分享,其他功能隱藏。1表示只有廣場可以分享,其他隱藏。
那麼這個二進位制如何在程式碼裡去判斷第幾位是1或者0呢,這一這麼算:
二進位制在java裡以0b開頭,比如1用二進位制在java裡表示為0b1.
如果要判斷第一位是否為1,則可以表示為shareStatu & 0b1 == 1,使用到了與運算,意思就是用前面的和後面的二進位制數與,如果相同位都是1則為1,否則為0,這樣比如shareStatu=3,也就是011,011&001=001=1.
如果要判斷第三位是否為1也就是是否可分享到私信,比如shareStatus=5,也就是101,因為要判斷第三位所以使用與的數也要為第三位為1,則為100,那麼與運算:101&100=100=4,除了判斷第一位,其他位都需要使用位移運算子>>,101&100>>2=1,>>意思是所有位向右移動,這時候就可以判斷是否等於1了,也就是:shareStatu&0b100>>2 == 1.
這裡需要注意的是,位移運算子的計算優先順序要高於其他,所以正確的表示式應該是這樣 boolean isOpen = ((shareStatu & 0b100) >> 2 == 1)
剛學到的,分享一下。
相關文章
- 二進位制與二進位制運算
- 進位制詳解:二進位制、八進位制和十六進位制
- JavaScript 二進位制、八進位制與十六進位制JavaScript
- (二進位制)
- 二進位制
- 十進位制——二 (八、十六 )進位制
- 二進位制,八進位制,十進位制,十六進位制的相互轉換
- 【進位制轉換】二進位制、十六進位制、十進位制、八進位制對應關係
- 二進位制、十進位制與十六進位制相互轉化
- java中二進位制、八進位制、十進位制、十六進位制的轉換Java
- 二進位制,八進位制,十進位制,十六進位制之間的轉換
- Python 進位制互相轉換(二進位制、十進位制和十六進位制)Python
- 用C#實現二進位制的減法(包括二進位制小數)C#
- 計算機基礎進位制轉換(二進位制、八進位制、十進位制、十六進位制)計算機
- 二進位制轉十進位制快速方法
- JAVA 二進位制,八進位制,十六進位制,十進位制間進行相互轉換Java
- 什麼是二進位制?二進位制如何轉換?
- 04 二進位制
- 大話二進位制,八進位制,十進位制,十六進位制之間的轉換
- 如何把十進位制的數輸入用二進位制全加器,並以十進位制輸出
- JavaScript十進位制轉換為二進位制JavaScript
- Oracle二進位制與十進位制轉換Oracle
- 十進位制轉二進位制推導(草稿)
- [計算機基礎] 計算機進位制轉換:二進位制、八進位制、十進位制、十六進位制計算機
- 一看就懂二進位制、八進位制、十六進位制數轉換十進位制
- python進位制轉換(二進位制、十進位制和十六進位制)及注意事項Python
- Oracle中的二進位制、八進位制、十進位制、十六進位制相互轉換函式Oracle函式
- 進位制之間的轉換之“十六進位制 轉 十進位制 轉 二進位制 方案”
- 整數轉化成八進位制、十六進位制、二進位制,以及轉回
- 十進位制與二進位制互相轉換指南
- 二進位制轉十進位制快速轉換方法
- 位,位元組,二進位制,十六進位制間的關係
- Cocoapods 二進位制
- 權勢二進位制
- 二進位制字串相加字串
- 二進位制陣列陣列
- 二進位制或序列
- 【轉帖】Oracle中的二進位制、八進位制、十進位制、十六進位制相互轉換函式Oracle函式