2016-07-12 3 views
-2

は、VS2008 C++、(ゼロから作られた空、)コンソールアプリケーションを使用してコードでこれを置く:1 + 1 = 0?私は何が欠けているのですか?今日はあまりにも長い間コーディングしていますか? :(

printf("\n\n%d + %d = %d !!!\n\n",(unsigned __int32)(19L/17L),((19L % 17L) == 0L)?0L:1L,(unsigned __int32)(19L/17L) + ((19L % 17L) == 0L)?0L:1L); 

そして、私はプログラムを実行すると、私が取得:

1 + 1 = 0 !!! 

は何午前私は行方不明?????? :'~(

+0

最後の '0L:1L'は' 1L:0L'でなければなりません。 –

+0

まあ、実際には関数を使わなくてもceil()のインプレース実装が欲しいです... 0の代わりに2を与える必要があります – AFour

+0

残念ですが、それらは括弧で囲む必要があります。 (19L/17L)、((19L%17L)== 0L)?0L:1L、((符号なし__int32)符号なし__int32)(19L/17L))+(((19L%17L)== 0L)?0L:1L)); – AFour

答えて

0
printf("\n\n%d + %d = %d !!!\n\n",(unsigned __int32)(19L/17L),((19L % 17L) == 0L)?0L:1L,((unsigned __int32)(19L/17L)) + (((19L % 17L) == 0L)?0L:1L)); 

オペレータ優先順位の単純な問題のようです。私は間違いなく、今日はあまりにも長くプログラミングされています:)

0

をあなたは(printfのための最後の引数には「優先」に欠けている)、さらには、条件よりも高い優先順位である。合計は

として評価されます「条件」は、非偽(非ゼロ)であるため、0Lある

​​3210

から210

(__int32)1 + (2L == 0) which is 1 + 0, or 1 (which is then promoted to long) 

ための条件解決します。

関連する問題