2012-02-08 5 views
7

私はGoogleで苦労している絶対に基本的なJavaの質問です。どのような以下の意味がある:Javaでのロジックの表記

7 == 0 || 8 == 0? 

私はこれをテストしている主な迅速を書いた、そしてケースのようです:

(7 & 8) == 0? 

は書き込みと同等ということです。私は何かを欠けていないことを確認したかっただけです。

答えて

17

いいえ。 &bitwise andです。対応するビットが両方の入力に設定されている場合は、ビットを設定します。バイナリでは7が111であり、8が1000であるため、ビットは共通ではないため、結果は0です。

実際には1行ではなく、提案するための略式構文はありません。 SetまたはBitSetのメンバーシップのテストには、switchステートメントを使用してください。効率的で短くても7 == 0 || 8 == 0のようなものはありません。

3

これは7と8と比較しているため、他のケースでは保証されていないため、ビット比較です。整数の両方のビットが一致すると、結果は「0」ではなく「1」となります。

4

&はビット単位のAND演算子です。これはAND演算は8と7を表すビットであることを意味します

7 - >0111

8 - >1000明らかに0

このwikipedia articleはとよくそれを説明し、その結果

あなたの正確な例と他のビットワイズ演算子について説明します。

10

&はビット単位でANDです。入力の2つのビットを考えると、次のようにビット単位でビット出力を提供し、この場合には

0 & 0 = 0 
0 & 1 = 0 
1 & 0 = 0 
1 & 1 = 1 

7 in binary is 00000111 
8 in binary is 00001000 
       -------- 
       00000000, which is 0 in decimal. 

あなたは26の代わりに、8

7 in binary is 00000111 
26 in binary is 00011010 
       -------- 
       00000010, which is 2 in decimal. 

ビット単位を持っていたと言います演算は、数値にパックされたフィールドを抽出して操作するために使用されます。

たとえば、3つのフィールドが1つの数字にパックされていて、それぞれ4ビットのうちの2つ(0..15)、1と3ビット(0..7)があるとします。

// n = aaaabbbbccc 

// Unpack the fields: 
a = (n >> 7) & 0xF; 
b = (n >> 3) & 0xF; 
c = (n >> 0) & 0x7; 

// Pack the fields: 
n = (a << 7) 
    | (b << 3) 
    | (c << 0); 
3

&述べたように、ビット比較であるが、ショートとして働くことができる「と」たとえば、

if((x == 3) && (y = 3/0)){ 

は常にエラーをスローします。xが等しい3、javaはFalseを&何がFalseになりますので、表現の残りの部分を評価する気にしないだろうしない場合、xが3に等しい場合は、

if((x == 3) & (y = 3/0)){ 

はエラーをスローします。

関連する問題