[問題] 新手發問 "!!"的意思

看板Programming作者 (Leila)時間13年前 (2012/03/08 13:11), 編輯推噓1(1018)
留言19則, 5人參與, 最新討論串1/4 (看更多)
看資料結構的書的時候,應該是用c寫的吧 發現code裡出現 !! 這個符號 煩請解惑感激不盡~ 節錄部份code: BinQueue Merge(BinQueue H1, BinQueue H2) { Bintree T1, T2, Carry=Null; int i j; if(H1->CurrentSize +H2->CurrentSize >Capacity) error("Merge would exceed capacity"); H1->CurrentSize += H2->CurrentSize; for(i=0, j=1; j<= H2->CurrentSize; i++, j*=2) } T1=H1->TheTrees[i];T2=H2->TheTrees[i]; switch( !!T1 + 2 * !! T2 + 4 * !! Carry) { case 0: /*no trees*/ case 1: /*only H1*/ break; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.84.2.1

03/08 21:12, , 1F
因為google過了也找不到 只好來這裡發問了
03/08 21:12, 1F

03/08 21:13, , 2F
是長得像這樣嗎?int a=5; if(!!a)..
03/08 21:13, 2F

03/08 21:14, , 3F
簡單的說,a是非0的話,!!a會傳回1;否則
03/08 21:14, 3F

03/08 21:14, , 4F
傳回0。
03/08 21:14, 4F
※ 編輯: Barros 來自: 219.84.2.1 (03/08 21:29)

03/08 22:13, , 5F
加了兩個not 不就等同互相抵消了??
03/08 22:13, 5F

03/08 22:13, , 6F
有加和沒加是一樣的?
03/08 22:13, 6F

03/08 22:19, , 7F
不同唷,a=1,b=5而言 :
03/08 22:19, 7F

03/08 22:20, , 8F
a+=b; --> a+=5 ---> a=6;
03/08 22:20, 8F

03/08 22:20, , 9F
a+=!!b ---> a+=!(!5)-->a+=!0-->a+=1
03/08 22:20, 9F

03/08 22:20, , 10F
--> a=2;
03/08 22:20, 10F

03/08 22:26, , 11F
(T1!=0)|((T2!=0)<<1)|((C!=0)<<2)
03/08 22:26, 11F

03/08 22:47, , 12F
了解了,謝謝
03/08 22:47, 12F

03/09 08:46, , 13F
真是神祕。
03/09 08:46, 13F

03/09 18:42, , 14F
一個!將整數變成布爾值,但邏輯意思是反的,
03/09 18:42, 14F

03/09 18:43, , 15F
再加!就回來了.
03/09 18:43, 15F

03/09 21:56, , 16F
他做二件事,一是將整數對應為0,1,二是將0,1
03/09 21:56, 16F

03/09 21:57, , 17F
(true,false)反過來當作數字來用. 但例子中
03/09 21:57, 17F

03/09 21:57, , 18F
看起來作法好怪,邏輯運算當數字運算用,數字
03/09 21:57, 18F

03/09 21:58, , 19F
運算卻當位元運算用.
03/09 21:58, 19F
文章代碼(AID): #1FMA_gGD (Programming)
文章代碼(AID): #1FMA_gGD (Programming)