2014-05-10 160 views
-1

我想做一些練習,但我堅持在這一點上,我不明白髮生了什麼事情,找不到任何與此特定事項有關的東西(找到其他東西關於邏輯運算符,但還不夠)邏輯運算符和位操作C

編輯:爲什麼downvote,我很明確。沒有關於X的類型的信息,但我認爲是INT,大小也沒有描述,我想我會通過做練習發現。

a) At least one bit of x is '1'; 
b) At least one bit of x is '0'; 
c) At least one bit at the Least Significant Byte of x , is '1'; 
d) At least one bit at the Least Significant Byte of x , is '0'; 

我有解決方案,但將是巨大的,以瞭解他們

a) !!x // What happens here? The '!' Usually is NOT in c 

b) !!~x // Again, the '!' appears... The bitwise operand NOT is '~' and it makes the int one's complement, no further realization made unfortunately 

c) !!(x & 0xFF) // I've read that this is a bit mask, i think they take in consideration 4 bytes in X, and this applies a mask at the least significant byte? 

d) !!(~x & 0xFF) // Well, at this point i'm lost ... 

我希望不必在大學逃課,但我全職工作,以支付費用: (

+2

'x'的類型是什麼? – Angew

+0

http://stackoverflow.com/questions/10307281/c-operator-is-a-two-not – Mat

+0

相信我,如果有關於X的類型的任何信息,我會把它。這裏沒有任何信息! –

回答

3

您可以添加括號單獨行動,爲了應用它們。例如

!(!(~x)) 

即!是2 NOT的

如果執行一個不就是會發生一些價值是什麼:

如果x == 0然後!x == 1,否則!x == 0

所以,如果你想進行另一次不行,你再反轉真值。即

如果x == 0然後!!x == 0,否則!!x == 1

你可以把它看作是讓你的價值在0到1之間,0表示:「沒有x的位爲‘1’」,1只表示:「在x的至少一位是'1'「。

此外,x & 0xFF採用變量的最低有效字節。更徹底地解釋這裏:

What does least significant byte mean?

+0

我認爲OP對'!'的雙重使用感到困惑。也許你應該解決這個問題。 –

+0

當我使用2個NOT時發生了什麼?這是我的疑問。關於面具,我想我明白操作數會發生什麼'&' –

+0

我編輯了答案。這有幫助嗎? – Arjen

1

假設x是一些unsigned int/short/long/......你想要的條件(如,而...):

一)You'll要知道,只是作爲條件的值/變量(沒有a==b或其他東西)
false如果它是0並且如果它不是0則爲真。因此,如果x不是0true),則其中一個!將會將其切換爲0,而另一個!會再次變爲不爲零的東西(不一定是舊值,只有不爲0)。如果x0,那麼!最後將再次產生0(首先不是0,然後再次是0)。
x整個價值不0如果至少有1位爲1 ...

什麼you're做的是轉變爲0至0或1位值到某一值與1位。沒有錯,但是...你可以只寫if(x),而不是if(!!x)

B)~交換機每0位到110。現在您可以再次搜索1,因爲您需要原始值爲0。再次事情...

c和d - 同!!:
&0xFF組除了最低的8家(最低字節)來0所有位。
A&B的結果是一個值,其中如果位於相同位置的A和B的位均爲1,則每位僅爲10xff(十進制255)是正好最低8位設置爲1的數字...