2017 9 3 訓練總結

2021-08-07 17:37:22 字數 1114 閱讀 5857

這幾天還是在看線段樹部分,例題之類的,

發現大佬們大都用位運算子。

1.位左移

左移運算的實質是將對應的資料的二進位制值逐位左移若干位,並在空出的位置上填0,最高位溢位並捨棄。例如int a,b;

a=5;

b=a<<2;

則b=20,分析過程如下:

(a)10=(5)10=(0000 0000 0000 0101)2

b=a<<2;

b=(0000 0000 0001 0100)2=(20)10

從上例可以看出位運算可以實現二倍乘運算。由於位移操作的運算速度比乘法的運算速度高很多。因此在處理資料的乘法運算的時,採用位移運算可以獲得較快的速度。

提示 將所有對2的乘法運算轉換為位移運算,可提高程式的執行效率

2.位右移

位右移運算的實質是將對應的資料的二進位制值逐位右移若干位,並捨棄出界的數字。如果當前的數為無符號數,高位補零。例如:

int (a)10=(5)10=(0000 0000 0000 0101)2

b=a>>2;

b=(0000 0000 0000 0001)2=(1)10

如果當前的資料為有符號數,在進行右移的時候,根據符號位決定左邊補0還是補1。如果符號位為0,則左邊補0;但是如果符號位為1,則根據不同的計算機系統,可能有不同的處理方式。可以看出位右移運算,可以實現對除數為2的整除運算。

提示 將所有對2的整除運算轉換為位移運算,可提高程式的執行效率

3.復合的位運算子

在c語言中還提供復合的位運算子,如下:

&=、!=、>>=、<<=和^=

例如:a&=0x11等價於 a= a&0x11,其他運算子以此類推。

不同型別的整數資料在進行混合型別的位運算時,按右端對齊原則進行處理,按資料長度大的資料進行處理,將資料長度小的資料左端補0或1。例如char a與int b進行位運算的時候,按int 進行處理,char a轉化為整型資料,並在左端補0。

補位原則如下:

1) 對於有符號資料:如果a為正整數,則左端補0,如果a 為負數,則左端補1。

2) 對於無符號資料:在左端補0。

關於線段樹的具體的題解有機會我再詳細的寫一寫,心好累,,,,這題好難做,,,,,雖然都是些模板題。。。但是不好做啊。。

暑假訓練總結 SSL暑假訓練總結

第一周過的還算好吧,覺得飯堂伙食也挺好的,同學也挺好。學習的東西感覺比小學難好多,有種覺得以前學的東西太簡單了的感覺,但多虧了小學的時候基礎打得還算紮實,學得還行,但總是感覺自己就是個菜雞,就是乙個蒟蒻,哎,室友真的太強了。第一周總結 第二週自我感覺挺不錯的,總算追上了部分室友,成績也開始 這一切都...

拓展訓練總結

拓展訓練總結 2006年4月30日至5月1日,我參加人眾人公司的 團隊協作 拓展訓練,在拓展訓練結束之後,雖然是身心俱疲,但感想頗多,特總結如下 一 關於拓展訓練 拓展是近年頗流行的時尚休閒方式,在教練的介紹下,我才知道它的由來 拓展英文為 outward development 中文譯為 拓展 或...

2017 1 13訓練總結

problem 0 給出乙個長度為n的序列a 1.n 將其變成序列b 1.n 的代價為 n i 1 a i b i 要使b 1.n 成為乙個不下降序列,問最小的代價 1 n 104 solution 這道題和之前做過的一道題很像,我的做法是用splay維護dp的陣列,打了二十多分鐘,還挺順的。pro...