#C 言語の & は何を意味しますか?
C 言語では、& は「ビットごとの AND」または「アドレス取得」演算子として使用できます。ビットごとの AND 演算子は二項演算子でもあります。その機能は、関係する 2 つの数値に対応することです。の 2 項 AND とアドレス演算子は単項演算子であり、演算結果を右オペランドのアドレスに設定します。# は、対応するビットに従って 2 進数の AND を演算し、新しい 2 進数を取得します。 1 と 0 は 0、1 と 1 は 1、0 と 0 は 0。
分析は次のとおりです。
はバイナリの各ビットの AND です。
例: 1010 0011& 0000 1111、結果は 0000 0011 です。つまり、0 を使用することはその桁を 0 にクリアすることと同等であり、1 を使用することはそのビットを保持することと同等です。
#アドレス演算子を取得
C 言語の & 演算子、定義: (&p) は、p が宣言されたときに開かれたアドレスを返す演算ですが、コードを観察したところ、& 演算子は単にアドレスを返すだけの関数ではないように感じます。 ##例:
int a = 1; //假设a的地址是0x7dfe88 int *p = (int *)0x7dfe88; int num = 1; int *p1 = #
上記はポインタ p と p1 に値を代入する簡単なコードです。0x7dfe88 は単純な 16 進数のアドレスですが、アドレスをポインタに変換すると、 、強制変換 (int *) を追加する必要があります。変換が実行されない場合、コンパイラは警告を発行します (警告 C4047: "初期化": "int *" と "int" には間接レベルが異なります)。 & 演算子を使用してアドレスを取得します。ただし、強制変換せずにコンパイルして渡すことができます。これは、& 演算子がアドレスを取得するほど単純ではないことを示しています。「=」代入演算子は右から左に演算します。 "= の右側もポインタであることを示しています。そこで、ここでは & 演算子が num のアドレスを取り出し、num の型に基づいて一時的なポインタを生成すると仮定します。
仮説に基づいて、次のコードを記述して検証します:
int num = 1; double *p1 = #
その結果、コンパイラはエラー「警告 C4133: "初期化": "int *" から "への型の非互換性" を報告しました。」 "ダブル *"" 。したがって、私の仮説にはある程度の真実があります。
推奨チュートリアル: "
C#"
以上がC言語で「&」ってどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。