sql中位運算的妙用

2021-08-27 14:38:43 字數 678 閱讀 6335

資料庫採用1,2,4,8,16.....等用數字標識(2的n次方)的狀態字段可以進行累加,對存在的幾種狀態進行組合,從而可形成各種組合狀態

例如:一條記錄該欄位原來的數字是,2,如我們想加上4,則可以用

update t_user set iflag = iflag| 4 where userid = 1

(iflag 為該欄位名)

例2:在加上4之後我們想去掉4怎麼辦呢,可以這樣實現

update t_user set iflag = iflag ^ 4 where userid = 1

這樣就又把4從該記錄中去掉了.

如果我們想選擇所有為2的記錄該怎麼做呢,可以這樣實現

select * from t_user where iflag & 2 = 2

sql中的位運算不但可以取出各種值,而且我們可以對他對資料進行排序

舉例如下,新聞列表中的乙個字段標識為

1:置頂

2:不置頂

4:推薦

8:不推薦

該字段的值可以為這4種狀態的組合,如果我們根據一定條件想把所有置頂的放在前面該如何做呢

select * from t_news order by iflag & 1 desc

這樣我們就把所有置頂的貼子排在前面,當然這裡可以加上一定的where 條件,在where 裡也可以加一定的位運算

程式中位運算的妙用

程式中的所有數在計算機記憶體中都是以二進位制的形式儲存的。位運算說穿了,就是直接對整數在記憶體中的二進位制位運算。比如,and運算本來是乙個邏輯運算子,但整數與整數之間也可以進行and運算。舉個例子,6的二進位制110,11的二進位制是1011,那麼6 and 11的結果就是2 0010 它是二進位...

位運算的妙用

位運算的操作 負數是按照補碼的形式參與按位與運算的 原碼就是符號位加上真值的絕對值,即用第一位表示符號,其餘位表示值.1為正,0為負 反碼的表示方法是 正數的反碼是其本身 負數的反碼是在其原碼的基礎上,符號位不變,其餘各個位取反.補碼的表示方法是 正數的補碼就是其本身 負數的補碼是在其原碼的基礎上,...

位運算的妙用

做題中常用的位運算有以下幾種 判斷奇偶性 if n 1 else 常用於快速冪和其他判斷奇偶性的地方 乘除2的整次冪 scanf d d n,m 輸出n乘2的m次方 printf d n m 線段樹求左兒子可以用 id 1得到,乙個偶數n 加1可以寫做n 1,如求左兒子可以用 id 1 1得到。sc...