資料庫採用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...