2017-03-06 11 views
0

x = 1の場合 どうすればよいですか ! x | x ? 私は実際に何をしたのかと混同しています。 x = 1 = 01、バイナリで !x = 10 = 11 = 3桁の10進数です。ビット単位のC操作

しかし、それは1でなければなりません(でも、(16進行く長い何かをしようとしたが、私が大学生として勉強)、私が得た-1)

答えて

4

!論理否定演算子です。ゼロ以外のものを与えると、ゼロを返します。あなたはそれをゼロを与える場合、それはあなたが戻って、これはビット単位否定演算子、~異なる方法1.

ので

!x | x 
=> !1 | 1 
=> 0 | 1 
=> 1 

注意を与えます。あなたの代わりに!の本を使用していた場合、物事はこのように働いているだろう(8ビットの値を仮定して、あなたは、32または64または任意にスケールアップすることができます):

~x | x 
=> ~1 | 1 
=> 11111110 | 00000001 
=> 11111111 
=> -1 

それはすべての違いを理解するまで来ます!~の間です。それは明らかではない。それはあなたが慣れていなければならないものです。ただ、ゼロ以外のx!x = 0のアラーム

!7 = !23423523 = !46 = !(-200) = !1 = 0 

として。それがまさにそれです。その背後にある考え方は、Cは0を偽とし、それ以外のものを真とみなします。だから、真70343のまたは1カウントなどの値が、それに!を適用すると、偽与え以来、または0

1

!オペレータは!xが数値とポインタの両方のタイプのx == 0に相当し、論理否定のためです。

!xx0に等しい比較し、他のすべての場合について0の値を有する場合int1の値を入力しています。

関連する問題