位運算
位運算符的分類及其定義
- 與運算符
&
: 既二進制情況下,2者都爲1才都爲1
1101 & 0011=0001(按位與) - 或運算符
|
: 既二進制情況下,2者有一個爲1就是1
如 1011| 0010=1011 (按位或) - 異或運算符
^
: 既二進制個情況下,相同則爲0,否則爲1
,如1111 ^ 0010=1101 (按位異或) - 作用:
-
因爲計算機都是二進制數據,而通常位運算會被正常的邏輯運算符快,因而性能上會有少許的提升(如&代替%)
-
並且可以減少內存,完全可以用
位置上的值
代替某種狀態 -
使用場景:
-
非常適合於
累加狀態的判斷
,添加,刪除,修改都非常方便,也就是說非常適合於權限等功能
-
- 如 有狀態 add=1 delete=2 update=4
- 則完全可以通過位運算來實現功能的累加
-
-
添加:
通過 | 運算符
: a=0 a | b 則b 的可能即可被添加到a上 ,0 | 1=0001 添加了add -
刪除:
通過異或運算符 ^
: a ^ b 則會在a中刪除b的功能 0111 ^ 0010 = 0101 刪除了delete -
判斷:
通過&運算符
: a & b 即可判斷是否存在功能b 0111 & 0100 =0100 >0 判斷delete功能是否存在
# 位運算
-
-
-
可以通過 位運算達到簡化多重if else
-
// @我的 0000 0001 1 MSG_CATEGORY_AT = 1 // 私信 0000 0010 2 MSG_CATEGORY_PRV = MSG_CATEGORY_AT << 1 // 贊 0000 0100 4 MSG_CATEGORY_APPROVE = MSG_CATEGORY_PRV << 1 // 回覆 0001 0000 8 MSG_CATEGORY_REPLAY = MSG_CATEGORY_APPROVE << 1 // 系統通知 0010 0000 16 MSG_CATEGORY_SYSTEM_NOTIFY = MSG_CATEGORY_REPLAY << 1 // 最大值 MSG_CATEGORY_MAX = MSG_CATEGORY_AT | MSG_CATEGORY_PRV | MSG_CATEGORY_APPROVE | MSG_CATEGORY_REPLAY | MSG_CATEGORY_SYSTEM_NOTIFY
-
for i:=8;i>0;i>>=1{ if i&k>=k{ params=append(params,i) } } 這樣就可以直接sql 中來個in查詢啦
-
-
範圍類型的定義可以
由小到達的順序
:-
// 範圍最小的type 點對點 MSG_TYPE_BETWEEN_USER=1 // 000000000 00000000 00000000 10000001 & 這個表明發送的都是羣組信息 MSG_TYPE_BASE_GROUP = MSG_TYPE_BETWEEN_USER << 7|MSG_TYPE_BETWEEN_USER // 羣組發送 000000000 00000000 11000000 00000001 MSG_TYPE_PLAT_USER_GROUP = MSG_TYPE_BASE_GROUP | MSG_TYPE_BASE_GROUP<<1 // 全站 用戶 00000000 00000000 10000000 00000001 MSG_TYPE_BASE_FULL_SITE= MSG_TYPE_BETWEEN_USER<<15 | MSG_TYPE_BETWEEN_USER // 平臺公告 00000000 00000001 10000000 00000001 MSG_TYPE_PLAT_ANNOUNCEMENT = MSG_TYPE_BASE_FULL_SITE | MSG_TYPE_BASE_FULL_SITE<<1 // 活動通知 00000000 00000010 10000000 00000001 MSG_TYPE_PLAT_EVENT_NOTICE = MSG_TYPE_BASE_FULL_SITE | MSG_TYPE_BASE_FULL_SITE<<2
-
再在判斷中
以由大到小的順序判斷:
if req.MessageType&constants.MSG_TYPE_BASE_FULL_SITE >= constants.MSG_TYPE_BASE_FULL_SITE { }else if req.MessageType&constants.MSG_TYPE_BASE_GROUP >= constants.MSG_TYPE_BASE_GROUP{ }else if if req.MessageType&constants.MSG_TYPE_BETWEEN_USER>=constants.MSG_TYPE_BETWEEN_USER{ }else{ }
-
並且,在參數校驗中,只需要判斷
是否滿足最小的即可
if r.MessageType&constants.MSG_TYPE_BETWEEN_USER < constants.MSG_TYPE_BETWEEN_USER { return errors.New("") }
-
算法
HD錢包(Hierarchical Deterministic)
- HD錢包的全稱是:
分層確定性錢包
。 - 在區塊鏈中可用於管理錢包
- 錢包生成流程:
- 1 .生成由12個單詞組成的助記詞;
- 2 .通過該助記詞生成一串私鑰,這串私鑰稱爲主私鑰或根私鑰;
- 3 . 通過主私鑰/根私鑰,生成N對子私鑰和子公鑰;
- 4 . 由這些子公鑰生成對應的錢包地址。
- 總結: 只需要
備份一串主私鑰,由主私鑰推斷出海量的子公私鑰
- 實際應用:
- 對於
企業級分層應用
: 如交易平臺,交易平臺保管其主公私鑰- 領導保管一串主公私鑰,生成一堆子私鑰,旗下部門保存各自的私鑰,這樣 領導可以管理部門,部門又有其隱私
- 對於個人而言:
- 個人保存其主公私鑰,每次收款的時候都使用新的地址來收款
- 對於