運算子在C 中的作用

2021-09-19 15:35:31 字數 1251 閱讀 3842

我們在學習新的知識或是**某些**時常常看到 「~」 的符號,它是什麼意思,有什麼作用呢?

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...