2014年1月9日 星期四

"!!" in C - C 語言中的兩個驚嘆號

有時候,會看到這樣的用法:
!!value

大家應該都知道 "!" 表示 "NOT",所以加了 "!" 0 會變 1 ,1會變 0。
以前學校是這麼教的,不過,其中倒是有一些小地方,不是這麼單純的。

首先,因為 C 語言的型態是很自由的(以前老師喜歡說是「很亂來的」)
如果變數的值單純的是 0 或 1,當然狀況就是像上面說的 0 變 1,1 變 0。

不過如果這個變數的值是 -1,1000,13.38 時呢?

實際上加了 "!" 變數就會被當成 bool 來看待,所以它就只有 0 跟 1。
而 C 語言中的判定是 0 就是 0 ,所有非 0 的就是1 。
所以上面舉的那些數,全部都會當成 1,而再加了 "!",就會全部變成 0。

根據這樣的規則,加了 "!!" 之後,就是 0 還 0,而非 0 的全變成 1。

沒有留言:

張貼留言