Re: [語法] C++ bool可以作bitwise運算嗎?

看板C_and_CPP (C/C++)作者 (撫星)時間15年前 (2010/07/04 23:58), 編輯推噓3(3020)
留言23則, 7人參與, 最新討論串2/2 (看更多)
※ 引述《StarTouching (撫星)》之銘言: : : C++中布林型態是否可以做位元運算? : : true & true = true (theorically, in bit level 1 and 1 is 1) : : false | false = false : : true ^ true = false : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 111.251.162.204 : → james732:或許你可以先實際試試看? 07/04 20:41 : → loveme00835:位元運算是對「整數」做運算, true & true 編譯器會建 07/04 20:44 : → loveme00835:立暫時物件來存 true 的整數值(1)才來做運算, 如果最 07/04 20:46 : → loveme00835:後要用bool型態的變數來存, 還是要從整數轉回來 07/04 20:47 也就是說, 以以下這個TF反轉例子來說 bool switch = false; ... switch = switch ^ true; // also: switch = !switch; compiler可能會拆成: unsigned tmp1 = unsigned(switch), tmp2 = 0x00000001; unsigned tmp3 = tmp1 ^ tmp2; //e.g. 0x00000001 xor 0x00000001 = 0xFFFFFFFE switch = bool(tmp3); //following the example above, tmp3 = 0xFFFFFFFE>=1 so switch = true => error 結論是這樣理論上會是錯的 對嗎? : 推 TroyLee:Did you ever try it? if not, why not? 07/04 21:28 謝謝 如果我只是想知道我自己電腦可不可以跑的話 我會踩那您的意見的。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.251.162.204 ※ 編輯: StarTouching 來自: 111.251.162.204 (07/04 23:59)

07/05 00:01, , 1F
... bitwise OP結果 何時和platform相關了?
07/05 00:01, 1F

07/05 00:05, , 2F
In fact, I'm not that sure.
07/05 00:05, 2F

07/05 00:06, , 3F
Especially it is related to bool type
07/05 00:06, 3F

07/05 00:07, , 4F
通常數值運算都是轉成int, 而且你用的unsigned(), 是
07/05 00:07, 4F

07/05 00:08, , 5F
建構, 不是轉型
07/05 00:08, 5F

07/05 00:09, , 6F
原 po XOR 運算可能還要加強一下
07/05 00:09, 6F

07/05 00:11, , 7F
0x00000000 XOR 0x00000001 = 0x00000001
07/05 00:11, 7F

07/05 00:13, , 8F
最後switch 結果為 true 是正常的
07/05 00:13, 8F

07/05 00:16, , 9F
Sorry 剛剛有點頭昏 想錯了 Orz
07/05 00:16, 9F

07/05 04:39, , 10F
八卦是 bool switch = false; 會編不過,因為 switch 是
07/05 04:39, 10F

07/05 04:39, , 11F
keyword。
07/05 04:39, 11F

07/05 09:38, , 12F
t大good job....XD
07/05 09:38, 12F

07/05 10:07, , 13F
我踩~~~~
07/05 10:07, 13F

07/05 10:49, , 14F
有人意見被踩了
07/05 10:49, 14F

07/05 10:57, , 15F
0.0
07/05 10:57, 15F

07/05 13:14, , 16F
補充:bitwise operator不會有short-circuit 的效果,雖
07/05 13:14, 16F

07/05 13:15, , 17F
然有時候好像可以取代logical operator, 但是這樣用是
07/05 13:15, 17F

07/05 13:16, , 18F
很無聊的
07/05 13:16, 18F

07/05 17:49, , 19F
其實我原本只是想用 ^= 的簡便寫法而已
07/05 17:49, 19F

07/05 17:50, , 20F
但發現C++的bool lhs似乎不給這麼用
07/05 17:50, 20F

07/05 17:50, , 21F
所已只好還是寫成switch = ~switch
07/05 17:50, 21F

07/05 17:51, , 22F
所以就來好奇問一下C++到底怎麼看待這樣的運算的
07/05 17:51, 22F

07/05 17:52, , 23F
上面打錯 是switch = !switch
07/05 17:52, 23F
文章代碼(AID): #1CCA-90c (C_and_CPP)
文章代碼(AID): #1CCA-90c (C_and_CPP)