因為位運算直接在記憶體中直接操作,所以具有高效性,如果能掌握一些簡單的位運算,將對自己寫的程式起到畫龍點睛的作用。
首先需要了解位運算符號及其作用:
運算子舉例
作用按位與(&)
1000&1011==10011
判斷整數的奇偶性
按位或(|)
00101|11100==11101
無左移(<
右移(>>)
1.乘以2的x次方
int n,x;
n>>1; //除以2
n<<1; //乘以2
n>>x; //除以2的x次方
n/乘以2的x次方
2.判斷奇偶
//二進位制末尾為0表示偶數,末尾為1表示奇數
int fun(int n)
//按位與計算規則:兩個數都為1時,返回1,否則返回0
//因此當n的末尾為1時,n&1返回1,即該fun函式的引數為奇數時,返回值為1
3.交換變數值
int a,b;
a=a^b;
b=a^b;
a=a^b;
//根據a和b進行兩次異或運算,值不變,例如a^b^b=a
上述是我目前碰到的位運算,今後會有補充
最後貼上開頭題目的**
#include
using
namespace
std;
unsigned
long
long a, b, c; //根據題意定義32位無符號
int main()
return
0;}
更新:
三種邏輯運算子:&&(與運算), ||(或運算), !(非運算)
六種位運算子:&(按位與) | (按位或) ^(按位異或) ~(取反) <>(右移)
由一道題引發的關於輸入輸出的總結
這道題要求輸入的形式如下 abc def dfs deddf defdeff 上面用乙個空行表示輸入的結束。然後開啟下面的輸入。怎麼解決這個問題呢?先說說scanf scanf可以用來輸入各種資料型別的變數,自動忽略末尾的回車符。但是scanf的乙個問題就是對於scanf s s 這種,字串間不能有...
一道演算法題,引發的思考
引言 有人問我這樣乙個問題,希望寫出 實現 有p0,p1兩點座標,組成乙個線段,求此線段與x點的的距離 我並不知道,如何完全的實現此功能,因為求點與線的公式,我記得是高中知識,但是我已經忘得差不多了,只是知道勾股定理算兩點間距離,直線方程有個斜率,如果給我時間去細想的話,應該可以理出頭緒,得到個寫此...
另外一道關於Random的程式設計題
如果有1000個不同的數字,如何隨機取得其中的100個成為數列,並且數列中沒有重複。基本原理就是每次把這個數字exclude在外面。public static int get100randomnumberlist int random if random null random.length 100...