0

据我了解,C 应该将 0xfe 转换为 -2,因此返回应该是 ceil(x) - 2 - 但该函数似乎都不返回任何一个。应该int m(double x){return 0xfe + ceil(x)}返回什么?

为这个新手问题道歉。我一般不是 C 程序员。刚刚学习十六进制和C。

4

4 回答 4

10

在 C 语言中,0xfe是一个十六进制int文字。具体来说,它等于254,所以结果是双精度值ceil(x) + 254.0

如果您显式转换为int8_t或其他 8 位有符号类型,如下所示:

(int8_t)0xfe

那么你可能会得到 -2 的值,但这不是标准所保证的。这是因为0xfe它的值 254 不能在有符号的 8 位字段中表示,因此适用标准第 6.3.1.3 节中的最后一条规则:

否则,新类型是有符号的,值不能在其中表示;结果是实现定义的,或者引发了实现定义的信号。

如果你想要这个值-2,写-2

于 2011-05-13T04:53:30.270 回答
7

0xfe不是 -2254

如果您愿意-2,请使用“ -2”(-0x02如果您真的想使用十六进制,请使用“”)。

于 2011-05-13T04:52:54.673 回答
2

在 C 中,0xfe 从不意味着 -2。另一方面,-2有时可能意味着 0xfe(如果转换,隐式或显式,为unsigned char)。

于 2011-05-13T05:11:16.577 回答
0

就像其他答案所说,如果你想要-2,你应该使用-2。

0xfe 有时可能表示 -2 是正确的,但这完全取决于存储值的数据类型。如果只写 0xfe,它将被解释为 int,意思是 254。如果将其存储在有符号字符中(一个字节,8位,范围-128到127),应该解释为-2。在 c/c++ 中,此数据类型称为char,我认为 C# 将其称为 byte,但我不确定。

于 2011-05-13T05:06:07.873 回答