• ベストアンサー

C言語の&に関する質問

C言語で if (x == 0.0) (いろいろな計算) return x < 0.0 && (n & 1) ? -ans : ans; というプログラムがあるのですが、 最後のreturnのところで x がゼロ以下で且つ、n &1の場合には -ansを返し、そうでない場合にはansを返すとあるのですが、 n&1というのはどういう意味なのでしょうか? C言語で&と言えば、 http://www9.plala.or.jp/sgwr-t/c/sec14.html のページにあるように、ビットごとの AND演算子ですが、 この場合にはどういう意味で使われているのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

質問者様が提示されているサイトに答えがあると思うのですが。 nがint(整数)という前提で、 nに設定されたデータの最終BITのみをマスクする処理 言い換えれば、奇数か偶数か判定する 以上です。

MADADA
質問者

お礼

ありがとうございます。 つまり、 nが奇数のときには1を返し、 偶数のときには0を返すという意味なのですよね? でも、 return x < 0.0 && (n & 1) ? という分岐の中に入れて、奇数の場合にはどちら?偶数の場合にはどちらへ分岐するのでしょうか?

MADADA
質問者

補足

すいません、理解できました。

その他の回答 (2)

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.3

#include<stdio.h> int main(void) { int x, n, ans; x = 1; n = 1 ; ans = 5; printf("x=%d n=%d ans=%d fnc=%d\n", x, n, ans, fnc(x, n, ans)); x = 1; n = 0 ; ans = 5; printf("x=%d n=%d ans=%d fnc=%d\n", x, n, ans, fnc(x, n, ans)); x = -1; n = 1 ; ans = 5; printf("x=%d n=%d ans=%d fnc=%d\n", x, n, ans, fnc(x, n, ans)); x = -1; n = 0 ; ans = 5; printf("x=%d n=%d ans=%d fnc=%d\n", x, n, ans, fnc(x, n, ans)); } int fnc(x, n, ans){ return x < 0.0 && (n & 1) ? -ans : ans; } x=1 n=1 ans=5 fnc=5 x=1 n=0 ans=5 fnc=5 x=-1 n=1 ans=5 fnc=-5 x=-1 n=0 ans=5 fnc=5 という結果になりました。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.2

判定の基本は条件が成り立つ場合 TRUE(1)となります。 今回のケースでは(n&1)の結果を判定しますから、 xがマイナスかつ奇数ならば、-ans それ以外ならばans となるでしょう。 質問文で、0以下というのは、間違いで、0未満つまりマイナスです。

関連するQ&A