8 9 集訓日記

2021-08-05 23:06:52 字數 1565 閱讀 8239

今天才知道好像要發好幾十篇部落格之後才不用審核

…今天把數論的課件看了看,算是再複習一遍,掌握的更好吧。都是之前學過的內容,只是有些記不清的,也沒什麼好寫的,這裡整理一下位運算的課件吧。

【位運算】

一、位運算子及規則1、

&   

按位與

全真則真 一假則假2、

|   

按位或

一真則真3、

^   

按位異或

同則假 異則真4、

<<   左移5

、>>   右移6

、~   

按位取反

二、位運算的應用 1

、「按位與」運算用於將某些二進位制位遮蔽掉。 例

1:使乙個整數

k中的低4位置

0。分析:用「與」運算實現: 將

k的低4位與

0相與,其他位與

1相與,即將

k與十六進製制的

1110

相與。

程式如下:

unsigned int_set(unsigned int

k)結論:任何二進位制位與

0相與能實現置0,與

1相與該位保持不變。 2

、「按位或」運算用與將某些二進位制位 置1。

例2:將乙個位元組的高

4位置為

1010

並輸出結果。

分析:直接用位運算子,可以很方便的置1、清

0、翻轉等,但無法直接實現置給定的值。可以用兩步實現:首先將高4位清

0,然後與

1010 0000

相或。

程式如下: /*

設a 為待處理的資料,轉換成二進位制為

00001000,b

用來儲存將a的高

4位清0後的結果

*/main()

執行結果:

10101000

3、按位異或運算經常用與將某些位翻轉。 例

3:將一整數n的高

8位翻轉,低

8位不變

分析:用「異或」運算實現,即高8位與

1相異或,低8位與

0相異或,也就是

k與十六進製制的

ff00

相異或。程式如下:

main()

執行結果:

before reset,n=00000000 10000001

after reset,n=11111111 10000001

結論:任何二進位制位與

0異或,保持不變;與

1異或,對應位翻轉。 4

、左移、右移運算實現將乙個數的各個二進位制位向左、向右移若干位。

左移:將乙個數的各個二進位制位左移若干位,高位左移後捨棄,低位補0 。

右移:將乙個數的各個二進位制位右移若個位,低位右移後捨棄,高位補

0還是補

1,要區別有符號數還是無符號數:無符號數高位補

0,有符號數高位補原符號位。

#include

#include

int main()

還乙個前兩天見到的,用位運算判斷奇偶數

: x&1以上~

8 1 集訓日記

今天看了有關容斥原理的幾篇部落格。容斥原理的基本思想是 先不考慮重疊的情況,把所有物件的數目求出,然後再把計數時重複計算的數目排斥出去,使得計算的結果既無遺漏又無重複。首先是乙個經典的互素問題 hdoj 4135 co prime 題目大意是 給定a,b,n,求區間 a,b 中與n互素的數的個數。思...

8 4 集訓日記

今天看了有關組合數學的一些內容。首先,排列組合的 為 ll c ll n,ll m ll a ll n,ll m 一道組合數學 位運算的題,hdoj4810 wall painting 題目大意 有一位畫家,有 n種顏料,給出 n種顏料的值。然後在1到 n天中,他每天都會選擇相應天數的顏料數進行混合...

8 10 集訓日記

今天上午看了有關單調佇列的課件,明天一起整理。下午做了練習賽,在這兒寫一下ac的三道題。b題,很水的一道題,求數字金字塔中經過數字的最大和。ac 及註解如下 include using namespace std int a 351 351 int main for int i n 1 i 1 i ...