今天才知道好像要發好幾十篇部落格之後才不用審核
…今天把數論的課件看了看,算是再複習一遍,掌握的更好吧。都是之前學過的內容,只是有些記不清的,也沒什麼好寫的,這裡整理一下位運算的課件吧。
【位運算】
一、位運算子及規則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 ...