1 9位運算與常用庫函式

2022-09-10 10:12:16 字數 1743 閱讀 4643

1.位運算

& 與 and

| 或 or

~ 非 not

^ 異或 xor

>> 右移

<< 左移

求x的第k位數字  x >> k & 1 , 從後往前數,最末一位是0

lowbit(x) = x & -x,-x是(~x+1) ; 返回x的最後一位1 , 即110110,則返回10 ; 101000,則返回1000.返回最後乙個1加上後面的一串0.

2.常用庫函式   #include

1)reverse() ; 不僅可以翻轉vector , 還可以翻轉陣列

將a陣列和b vector翻轉輸出

2)unique函式 , 去重

返回去重之後的尾迭代器(或指標),仍然為前閉後開,即這個迭代器是去重之後末尾元素的下乙個位置。該函式常用於離散化,利用迭代器(或指標)的減法,可計算出去重後的元素個數。

把乙個vector去重:

int m = unique(a.begin(), a.end()) – a.begin();

把乙個陣列去重,元素存放在下標1~n:

3)random_shuffle 隨機打亂 , 用法與reverse相同

random_shuffle(a,a+10);//

陣列random_shuffle(b.begin() , b.end());//

vector

4)sort函式,用來排序

sort(a,a+10);//

陣列,從小到大

sort(b.begin() , b.end() , greater());//

vector,從大到小

自定義struct結構體排序:

5)lower_bound/upper_bound  二分

lower_bound 的第三個引數傳入乙個元素x,在兩個迭代器(指標)指定的部分上執行二分查詢,返回指向第乙個大於等於x的元素的位置的迭代器(指標)。

upper_bound 的用法和lower_bound大致相同,唯一的區別是查詢第乙個大於x的元素。當然,兩個迭代器(指標)指定的部分應該是提前排好序的。

在有序int陣列(元素存放在下標1~n)中查詢大於等於x的最小整數的下標:

int i = lower_bound(a + 1, a + 1 + n,. x) – a;

在有序vector中查詢小於等於x的最大整數(假設一定存在):

C C 語法 (六)常用庫函式與位運算

當代計算機畢竟服務於二進位制,有這麼個運算方式也就不奇怪了,與 或 非 取反 就不談了,胎教的時候已經學過了,著重看一下異或 異或可以理解為無進製加法,如 0 oplus0 0 1 oplus1 0 0 oplus1 0 除此之外還有左移 右移,計算機組成原理裡已經學得很多了,無需多言。若想取出乙個...

64位 atol c linux C 庫函式

c 庫函式 atol 描述c 庫函式 long int atol const char str 把引數 str 所指向的字串轉換為乙個長整數 型別為 long int 型 宣告下面是 atol 函式的宣告。long int atol const char str 引數str 要轉換為長整數的字串。返...

常用位運算

檢測乙個無符號數是不為2 n 1 為冪 x x 1 將最右側0位改為1位 x x 1 二進位制補碼運算公式 x x 1 x 1 x x 1 x x 1 x x 1 x y x y 1 x y x y x y x y 1 x y x y x y x y x y x y x y y x y x y x ...