2013-04-18 9 views
5

C++の奇数は、剰余があるように分割された場合、またはこれに例外がないように、常に結果のfloorを返すことができますか?つまり、奇数は、剰余で除算すると常にfloorを返しますか?

int x = 5; 
x = x/2; 
cout<<x;  //2 
+1

はい。しかし、なぜ? ansの標準では5.6.4だから –

+0

私は、ありがとうたくさん参照してください:) – Straightfw

+2

分子が負の場合、結果はちょっと変になります。 –

答えて

2

整数除算はC/C++ではfloor演算として扱われます。

実際の回答2.5は表現できないため、上記の例では2が得られます。

Some more verbose answers here

+0

偉大な、ありがとう:) – Straightfw

+0

"通常"ではありません。これは必須です。 –

+0

@Guvante:ハァッか。これは非常にうまくいくかもしれません。なぜなら、これはCの質問ではありません....... –

5

はい。あなたがCにそのことを確認することができます(草案)++

ISO/IEC N3485はい5.6.4

The binary/operator yields the quotient, and the binary % operator yields 
the remainder from the division of the first expression by the second. 
    If the second operand of/or % is zero the behavior is undefined. 
For integral operands the/operator yields the algebraic quotient with any 
fractional part discarded;81 if the quotient a/b is representable in the type 
of the result, (a/b)*b + a%b is equal to a; otherwise, the behavior of both 
a/b and a%b is undefined. 
+1

作業草案から進んできました! C++ 11が存在する。 –

+0

も無料で、この草案:-) –

+0

これは言語標準ではないからです。この場合、もちろん番号とテキストは同じです。 –

2

で述べています。整数の間の分割は、C++で常に積分部門である:

[C++11 5.6/4]:バイナリ/オペレータは、商を生成し、バイナリ%オペレータは、第による最初の式の除算の剰余を与えます。 /または%の第2オペランドが0の場合、動作は未定義です。 整数オペランドの場合、/演算子は、小数部が破棄された代数商を生成します。 の商a/bが結果の型で表現できる場合、(a/b)*b + a%baに等しくなります。

関連する問題