二進位制列舉的一些思考和例題

2021-10-01 21:47:06 字數 2141 閱讀 5187

固定模板

for (int i=0;i<(1<這樣就把所有數遍歷了一遍,用1《去和i與就可以去選其中的某幾個數

最後去應用這個方法解決一些問題

我覺得之所以用二進位制思想去解決問題是因為二進位制表示的一些巧妙的地方,這得慢慢

結合題目去悟

算數字運算:

1、與(&):

對於指定的兩個數a=60(0011 1100)

b=13(0000 1101)

執行一下操作 a&b=12(0000 1100)

就是對二進位制每一位進行了一次與操作,同為1,結果為1,否則為0

其實說白了就是只要有0就是0;

2、或(|):

對於指定的兩個數a=60(0011 1100)

b=13(0000 1101)

執行一下操作 a|b=61(0011 1101)

就是對二進位制每一位進行了一次或操作,同為0,結果為0,否則為1

說白了就是有1就為1;

關於與和或其實可以模擬&& ||

3、非 按位取反(~):

對於指定的乙個數a=60(0011 1100)

執行以下操作 ~a=195(1100 0011)

就是對二進位制每一位進行了一次取反操作,若二進位制數字0,則變成1,否則變成0.

4、異或運算

a,b值不同為1(就是兩個數乙個1 乙個0) 相同時為0;

在c/c++中異或用^符號表示;

就是兩個二進位制數相加後的結果捨去進製

移位操作有兩種左移與右移:

1、左移<<

例如:a=5(0101)

如果向左移動一位即a<<1結果為1010,十進位制的10。二進位制中的左移就是乘二操作,在c/c++中左移運算速度比乘二速度要快。

其實就是往後面加多少個0

2、右移》

例如:a=5(0101)

如果向右移動一位即a>>1結果為0010,十進位制的2。二進位制中的左移就是除二操作(捨去小數)。

#include

using

namespace std;

intmain()

cout<}return0;

}

#include

using

namespace std;

intmain()

}if(flag==0)

cout<<

"no"

<}return0;

}

#include

using

namespace std;

intmain()

else}if

(k1==

5&&k2==

10&&tmp==

0)ans++;}

printf

("%d\n"

,ans)

;return0;

}

#include

using

namespace std;

int a[20]

,ans,sum;

intmain()

if(sum==p)

ans++;}

cout<}return0;

}

在這裡插入**片
#include

using

namespace std;

double a[15]

,b[15

],c[15]

,ac[15]

,no[15]

,ans,p,x,cnt;

intmain()

else

p=p*no[j];}

if(cnt==x)

ans=ans+p;

}printf

("%.4lf\n"

,ans);}

return0;

}

二進位制補碼的一些思考

最近都一直在看幾本關於計算機組成原理方面的大作 code the hidden language of computer hardware and software computer system a programer perspective introduction to computer sy...

二進位制列舉

fliptile 乙個反轉問題,大意是一頭牛要反轉木板,木板有黑和白,全部翻成白色的反法 輸出。小蒟蒻根本想不到 參考了大佬的部落格。點此轉入 把第一行的全部翻法都試一遍,然後看哪種的步數最少。好難想。include include int maze 20 20 int t 20 20 int f ...

二進位制列舉

一 二進位制操作 算數字運算 a 60 0011 1100 b 13 0000 1101 1.與 兩個二進位制數,同 1為 1,否則為 0。a b 12 0000 1100 2.或 兩個二進位制數,同 0為 0,否則為 1。a b 61 0011 1101 3.非 按位取反 對二進位制每一位進行了一...