[英]Conditional Statement using Bitwise operators
所以我看到這個問題已經被問過了,但是答案有點含糊而且沒有幫助。 好的,我需要僅使用 "& ^ ~ ! + | >> <<" 來實現 c 表達式
表達式需要類似於:a? b: c
因此,據我所知,表達式需要類似於:
return (a & b) | (~a & c)
這在 a = 0 時有效,因為它與 b 的 anding 將給出零,然后 or 表達式將返回右側, (~a & c)
這是有效的,因為 ~0 給出所有的值,並且 c 與所有的值一起返回 c .
但是,當 a > 0 時,這不起作用。有人可以嘗試解釋為什么會這樣,或者如何解決它嗎?
我會使用!!a
將a
轉換為 boolean,以獲得 0 或 1.x x = !!a
。
然后我會用二進制補碼否定它。 由於您沒有可用的一元減號,因此您使用 2 的補碼否定的定義:反轉位,然后加一: y = ~x + 1
。 這將清除所有位,或設置所有位。
and
我直接用一個變量y & b
,它與另一個變量相反: ~y & c
。 這將為其中一個表達式提供 0,為另一個提供原始變量。 當我們or
那些在一起時,零將不起作用,因此我們將獲得原始變量,保持不變。
換句話說,如果 a 為false
(即 0),則需要a
將所有位設置為 0,如果a
為真(即a > 0
),則需要將所有位設置為 1。
對於前一種情況,工作已經為您完成; 對於后者——嘗試計算表達式~!1
的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.