2016-04-03 11 views

答えて

5

cが偶数の場合は0を返し、cが奇数の場合は1を返します。 &演算子はビットと演算子で、この場合は最初のビットを返します。

4

私はラインでそれをラインを取るよ:

int code0(int c) { 

これはcode0という名前の関数を定義し、最初のintは、戻り値の型であり、第二intがあまりにも

return c&1; 
整数として引数 cを定義します

これは、に対してcbitwise andの値を返します。結果は、1またはのいずれかになります。整数の最終ビットに応じて、cあなたはこれだけの関数定義をクローズ機能に

} 

を可決しました。

基本的に、この関数はfinalとして、また、あなたは、この関数に渡す整数の最後のバイナリビットがcが奇数(1)あるいは(0)であるか、または簡単な言葉であるもの

を返します。私は通常、関数を使用しませんが、ビット演算をインライン(例えばif(myvar&1==0))にすると、これは単純なことですが、最終結果で分岐の必要性を減らすことができます。現代のコンパイラは、あなたのためにこのような単純な関数をインライン化するのに十分素晴らしいです - でも良いことはコンパイラの最適化に依存しないと言います) - Slavaが指摘しているように、 seケース。

+1

"私は通常、この種の操作をインラインで行います"この関数は、cが奇数かどうかを計算していると仮定していましたが、そうではないかもしれません。それで、手動でインライン化してはいけませんが、インライン関数は何らかの理由で変更される可能性があります。 – Slava

+0

質問の関数を特に指しています。これは、より複雑な使用法が暗黙のうちに私は同じタイプの操作としてそれを分類しないだろうかという質問。私は答えを言い直す。入力のおかげで。 – SteJ

+0

私はおそらく関数tbhに固執します。実際にはそれはまともな名前を持っていると仮定し、実装からインテントを分離し(メンテナンスを非常に簡単にします)、インライン化できるためにコストがかかりません。 2016年には、あなたは希望や驚きを必要としません。自分自身をインライン展開することは、今日の時代には至っていないのです。プログラムを明示的に記述し、コンパイラに残りの部分を整理させます。 –

1

この関数を使用して、指定された整数が奇数か偶数かを調べることができます。すべての奇数番号は、最初のビット(最下位ビット)としてビット1を持ちます。

例えば、

3 => 11

5 => 101

あなたがcode0(5)を呼び出すのであれば、それはint型1(=> 001 101 & 001)を返します。あなたがcode0(EVEN_NUMBER)を呼び出す場合

、その後、彼らは、この関数を呼び出すことにより、あなたは任意の整数の最初のビット(最下位ビット)の状況について知ってもらうことができます、だから、INT 0

戻ります。

関連する問題