我們在學習新的知識或是**某些**時常常看到 「~」 的符號,它是什麼意思,有什麼作用呢?
1:「~」的作用
「~」的解釋為:對某一常數轉化為二進位制時對各位進行取反,是一種位運算。
舉個例子 「4」的二進位製碼為 「100」 取反之後——》變為 「011」同時正負顛倒,於是「~4」在數值上等於「-5」;
同理「~1046」=「-1047」 ,「~0」=「-1」,
等等。細心的讀者已經發現了 「~a」="-(a+1)".
沒錯,的確是這樣。(至少計算結果一樣)
2:「~」的應用
我們常常會看到這樣的**
while(~scanf("%d%d",&n,&m))
在這裡 當程序讀入「n,m」失敗後,有些系統會返回乙個值,我們稱之為「eof」
這裡「~eof」實際上是等於「0」的。
所以
while(scanf("%d%d",&n,&m)!=eof)
兩段**是等效的。
除此之外,「~」還可以這麼用
以下是一道關於ac自動機的題目的**(節選)
const int n=1000;
struct ac_automaton
e[p]++;
} void build()
else tr[k][i]=tr[fail[k]][i];
//匹配到空字元,則索引到父節點fail指標對應的字元,以供後續指標的構建
//類似並差集的路徑壓縮,把不存在的tr[k][i]全部指向tr[fail[k]][i]
//這句話在後面匹配主串的時候也能幫助跳轉
}} }
int query(char *t)
return res;
}};ac_automation ac;
(不准說我水字數 =v=)
我們主要看這一段
int query(char *t)
return res;
}}
這裡的~e[j]同樣是可以替代的
那麼有的讀者可能會問了:「「~」運算子一點也不直觀,我們為什麼要用它呢?」
因為位運算快啊!
2019.7.24進行了修改
「~」還可以這麼用
//for(int i=0;i反正更快就是了(霧)
C 作用域運算子( )
是c 裡的 作用域運算子 比如宣告了乙個類a,類a裡宣告了乙個成員函式void f 但沒有在類的宣告裡給出f的定義,那麼在類外定義f時,就要寫成void a f 表示這個f 函式是類a的成員函式。一般還有一種用法,就是直接用在全域性函式前,表示是全域性函式。當類的成員函式跟類外的乙個全域性函式同名時...
C 作用域運算子
c 作用域運算子是c 運算子中等級最高的。運算子的本質是 左運算元為域,是乙個scope,右運算元是這個scope中的乙個名字,它可以是乙個scope class member function或者variable等。google style對域作用符的建議和說明可參考 的作用主要包括以下三種 後兩...
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...