運算子
邏輯運算子
& 位邏輯與
如果b是奇數,那麼結果就為1;反之偶數,則為0.
| 位邏輯或
- 位邏輯反
^ 位邏輯異或
如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0
快速比較兩個值
判斷兩個int數字a,b是否相等,你肯定會想到判斷a - b == 0
,但是如果判斷a ^ b == 0
效率將會更高
奇偶判斷
按位取反 ~
左移<<
左移一位相當於該數乘以2,左移2位相當於該數乘以2^2=4
帶符號右移 >>
無符號右移 >>>
常用函式
cmath標頭檔案下的三個個取整函式
floor(x)(有時候也寫做floor(x))
功能:「向下取整」,或者說「向下捨入」,即取不大於x的最大整數
ceil(x)
功能:「向下取整」
兩個取整函式返回的型別都是 double
round(x)
功能:返回x的四捨五入整數值。
#include#includeint main()
/*3.14
3.00
4.00
3.00
*/
如果up、down和p是int型別,那麼結果就是整數,這應該有強制轉換?不清楚……
string類中的函式
substring函式
str.substring(i, j)表示字串str中從位置i到位置j的子串,如果i>j則,substring為空
string自身的find函式,從下標 lastpos+1 開始,查詢字元 ','
string s;
int p = s.find(',', lastpos+1);
unique()函式
unique() 是「去重」函式,但不是真正的去重
標頭檔案是 iostream
使用這個函式的前提是元素已經是有序的了,why?
因為不是真正的去重嘛,重複的會被放到位址a及其後面,a前面的都是單個不重複的
例如c長度的v陣列
sort(v,v+c);
c = unique(v,v+c) - v;
函式會返回a的位址,我們再減去首位址,就是不重複的個數了
現在說為什麼有序呢,因為這個函式只對相鄰的元素操作,so
標頭檔案:algorithm
兩個函式的使用物件都是非遞減序列,都是按照二分查詢的方式查詢
upper_bound(x,x+n,y) (在x陣列裡面查詢y)
返回值是位址
upper_bound()函式:返回第乙個 大於y 的位置。
是查詢大於y的第乙個位置,
也可以查詢x陣列中小等於y的個數,upper_bound(x,x+n,y) -x
lower_bound()函式:返回第乙個 大於等於 y 的位置。
strstr() 函式
標頭檔案:string.h / cstring
作用:strstr
(str1,str2) 函式用於判斷字串str2是否是str1的子串。
如果str2是str1的子串,那麼返回值是str2在str1出現的首位址;如果不是,返回null。
stristr()與strstr
()函式區別就是前者可以不區分大小寫,而後者區分。
atoi函式
atoi函式(表示 ascii to integer)是把字串轉換成整型數的乙個函式
標頭檔案 #include
memcpy函式
拷貝函式 標頭檔案:string.h / cstring
從源src所指的記憶體位址的起始位置開始拷貝n個位元組到目標dest所指的記憶體位址的起始位置中
memcpy(bestp, p, sizeof(p));
將p拷貝到bestp
C 中 運算子 和 運算子
運算子定義在將可空型別分配給非可空型別時返回的預設值。int?c null 若 c 為 null,則 d 為 1,否則把 c 值賦予 d int d c 1 型別名稱後加問號,如 int?i null double?d null bool?b null 可指定可為 null 的 int double...
C 中的 和 運算子
和 運算子 構串操作符 構串操作符 只能修飾帶引數的巨集的形參,它將實參的字串行 而不是實參代表的值 轉換成字串常量 define string x x x x define text x class x info 巨集引用 int abc 100 string abc text abc 替換結果 ...
C 中的is和as運算子
is運算子 有些型別之間的轉換並不是能夠轉換成功,強制的轉換反而會丟擲一些異常,那麼,可以使用is運算子來檢查轉換是否可以轉換成功。is的語法如下 variable is newtype 如果variable可以通過引用轉換 裝箱轉換和拆箱轉換的方式轉換為newtype,那麼運算子返回true。舉例...