0

私が理解しているように、C は 0xfe を -2 に変換する必要があるため、戻り値は ceil(x) - 2 になるはずですが、関数はどちらも返さないようです。何をint m(double x){return 0xfe + ceil(x)}返す必要がありますか?

この初心者の質問をお詫びします。私は一般的に C プログラマーではありません。16進とCについて学んでいます。

4

4 に答える 4

10

C 言語で0xfeは、16 進intリテラルです。具体的には、 と等しい254ので、結果は倍精度値 になりますceil(x) + 254.0

または別の 8 ビット符号付き型に明示的に変換する場合はint8_t、次のようになります。

(int8_t)0xfe

値 -2 を取得する場合ありますが、これは標準では保証されていません。これは0xfe、符号付き 8 ビット フィールドでは表現できない値 254 を持つため、標準のセクション 6.3.1.3 の最後の規則が適用されるためです。

それ以外の場合、新しい型は署名され、値を表現できません。結果が実装定義であるか、実装定義のシグナルが発生します。

値が必要な場合は-2、 と書き-2ます。

于 2011-05-13T04:53:30.270 に答える
7

0xfeありませ -2254

必要に応じて-2、" -2" (または-0x02、本当に 16 進数を使用する場合は " ") を使用します。

于 2011-05-13T04:52:54.673 に答える
2

C では、0xfe neverは -2 を意味します。一方、-2 は0xfe を意味する場合があります (暗黙的または明示的に変換された場合unsigned char)。

于 2011-05-13T05:11:16.577 に答える
0

他の回答が言ったように、-2 が必要な場合は、-2 を使用する必要があります。

0xfe が -2 を意味する場合があることは正しいですが、これは値が格納されているデータ型に完全に依存しています。0xfe のみを書き込むと、int として解釈され、254 を意味します。 (バイト、-128 ~ 127 の範囲の 8 ビット)、-2 として解釈する必要があります。c/c++ では、このデータ型はcharと呼ばれます。C# では byte と呼ばれていると思いますが、よくわかりません。

于 2011-05-13T05:06:07.873 に答える