1

-6iこのコードの意味は何ですか?

#include<stdio.h>

int main()
{
    int i = 1234;
    printf("%d",-6i);
}
4

2 に答える 2

4

あなたの本当の質問に答えるに-6iは、複雑な定数(GCC拡張)です。http://gcc.gnu.org/onlinedocs/gcc/Complex.htmlから:

複雑なデータ型で定数を記述するには、接尾辞 'i' または 'j' (どちらでも同じです) を使用します。たとえば、2.5fihas type_Complex float3ihas type_Complex intです。このような定数は常に純粋な虚数の値を持ちますが、実数の定数に 1 を加えることで任意の複素数を形成できます。これは GNU 拡張です。ISO C99 準拠の C ライブラリ (GNU libc など) があり、浮動小数点型の複雑な定数を作成したい場合は、代わり<complex.h>にマクロIorを含めて使用する必要があります_Complex_I

したがって、iin-6iは変数 とは何の関係もありませんi。ちょうどfin の float 定数-1.0fが という名前の変数とは何の関係もありませんf

フォーマット仕様は複雑な引数を処理しないため、補足として、printf("%d",-6i);未定義の動作です。%dGCC は、(私が知る限り) 複合型の表現について約束をしていません。それが何をするかについては、多くを語ることはできませんprintf()

複雑な値を出力するには、複雑な値の各コンポーネントを個別に抽出する必要があると思います (glibcprintf()には、GCC の複雑な型を処理するフォーマット仕様拡張がないと思います)。何かのようなもの:

printf("%d %d\n",__real__ -6i, __imag__ -6i);
printf("%f %f\n",__real__ -6.i, __imag__ -6.i);
于 2012-11-29T18:26:33.930 に答える
1

コードを少し変更すると、次のようになります。

int main(){
   int i = 1234;
   printf("%d",-6*i); 
   }

あなたは-7404戻ってくるかもしれません。

2 番目の質問に答えるには、この質問を確認してください。

于 2012-11-29T18:22:25.750 に答える