2016-06-22 16 views
-3

私はC言語を新しくしており、NREL available hereからいくつかのコードを理解しようとしていますので、Rで同様の機能をプログラムすることができます。把握するために:私はPDATはPOSDATA構造体へのポインタで、ヘッダファイルから、私が知っていることを理解しC言語でのアンパサンドの使用

if (pdat->function & L_DOY) 

:特に

long S_solpos (struct posdata *pdat) 
{ 

if (pdat->function & L_DOY) 
    doy2dom(pdat);  
} 

を、どのような評価基準がに求めています「関数」は、さまざまなintを含むposdata構造の変数ですGERコード:

struct posdata 
{ 
int function; 

とL_DOYは、1つのそのような関数とすることができること:

/*Define the function codes*/ 
#define L_DOY 0x0001 
#define L_GEOM 0x0002 
#define L_ZENETR 0x0004 

私はif文がPDAT内の関数の変数がL_DOY用のコードに対応するかどうかをチェックしていることを前提としています。しかし、私はC言語ではまだまだ新しく、このようなif文でアンパサンドを使用する例や説明を見つけることができませんでした。

ご協力いただきありがとうございます。

+4

https://en.wikipedia.org/wiki/Bitwise_operations_in_C#Bitwise_AND_.22.26.22 – Adrian

+0

単一のアンパサンドはブール代数のビット単位のAND演算子で、しばしばビットマスクとして使用されます。これらの概念に精通していない場合は、googleまたはwikipediaを参照して説明してください。 –

+2

[C言語での&(AND)演算子の使用は何ですか?](http://stackoverflow.com/questions/24836647/what-is-use-of-and-operator-in-c-language) –

答えて

1

bitwise-andを意味します。テストする値は、1つまたは複数のセットを持つことができるビットフラグのセットです。 bitwise-andは両方のオペランドに現れるビットを保持するので、0b0101 & 0b0011は0b0001(両方のオペランドに唯一のビットがセットされます)を生成するので、L_DOYフラグが特に設定されているかどうかをチェックしています。 L_DOYは単一のビットであるため、低いビットは、そのビットがfunctionに設定されているかどうかをチェックしています。他のビットがセットされているかどうかは気にしません。

+0

ありがとう!それは今意味がある。 – arharris

関連する問題