由一道關於位運算的程式設計題引發的思考

2021-08-10 10:13:31 字數 1144 閱讀 2488

因為位運算直接在記憶體中直接操作,所以具有高效性,如果能掌握一些簡單的位運算,將對自己寫的程式起到畫龍點睛的作用。

首先需要了解位運算符號及其作用:

運算子舉例

作用按位與(&)

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...