私が理解しているように、C は 0xfe を -2 に変換する必要があるため、戻り値は ceil(x) - 2 になるはずですが、関数はどちらも返さないようです。何をint m(double x){return 0xfe + ceil(x)}
返す必要がありますか?
この初心者の質問をお詫びします。私は一般的に C プログラマーではありません。16進とCについて学んでいます。
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
ます。
0xfe
ありませ -2
ん254
。
必要に応じて-2
、" -2
" (または-0x02
、本当に 16 進数を使用する場合は " ") を使用します。
C では、0xfe
neverは -2 を意味します。一方、-2 は0xfe を意味する場合があります (暗黙的または明示的に変換された場合unsigned char
)。
他の回答が言ったように、-2 が必要な場合は、-2 を使用する必要があります。
0xfe が -2 を意味する場合があることは正しいですが、これは値が格納されているデータ型に完全に依存しています。0xfe のみを書き込むと、int として解釈され、254 を意味します。 (バイト、-128 ~ 127 の範囲の 8 ビット)、-2 として解釈する必要があります。c/c++ では、このデータ型はcharと呼ばれます。C# では byte と呼ばれていると思いますが、よくわかりません。