我想如果EVAL 0和255之間的整數等於0或等於224爲此,使用位運算符
我有這樣的代碼:
if (!num || 224 == num)
有沒有做一個方式這使用一些按位操作?
我試過了,我的有效期爲:0,31,32,63,64,95,96,127,128,159,160,191,192,223,224,255。顯然是不好的,因爲我只有需要0和224
!((num+1) & 30)
我想如果EVAL 0和255之間的整數等於0或等於224爲此,使用位運算符
我有這樣的代碼:
if (!num || 224 == num)
有沒有做一個方式這使用一些按位操作?
我試過了,我的有效期爲:0,31,32,63,64,95,96,127,128,159,160,191,192,223,224,255。顯然是不好的,因爲我只有需要0和224
!((num+1) & 30)
是返回true,輸入的範圍使其稍微容易。
您可以使用(x - 1) >> 31
檢測x
是否爲0(技術上不便攜,但是通常會工作)
它依賴於x
永不已經小於0,並且,非便攜,對右移signed int是一個算術移位(通常是這種情況)。
同樣,你可以使用((x^224) - 1) >> 31
檢測224
只是把它們放在一起這樣的:
int mask = ((x - 1) >> 31) | (((x^224) - 1) >> 31);
而且你去那裏。
非常感謝這麼多。有用。 – carlos
@carlos你可能喜歡[接受這個答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work?answertab=votes#tab-top) –
if (!num^0x3F) {
// a little less readable
}
這對我不起作用。此程序:(!NUM^0x3F的)'的#include
向我們展示您的嘗試。 – WhozCraig
爲什麼?它已經在使用快速操作,更重要的是它是可讀的 –
標準的地方去找點東西是[Bit Twiddling Hacks](http://graphics.stanford.edu/~seander/bithacks.html)。不過,我不確定它是否涵蓋這種情況。 –