据我了解,C 应该将 0xfe 转换为 -2,因此返回应该是 ceil(x) - 2 - 但该函数似乎都不返回任何一个。应该int m(double x){return 0xfe + ceil(x)}
返回什么?
为这个新手问题道歉。我一般不是 C 程序员。刚刚学习十六进制和C。
在 C 语言中,0xfe
是一个十六进制int
文字。具体来说,它等于254
,所以结果是双精度值ceil(x) + 254.0
。
如果您显式转换为int8_t
或其他 8 位有符号类型,如下所示:
(int8_t)0xfe
那么你可能会得到 -2 的值,但这不是标准所保证的。这是因为0xfe
它的值 254 不能在有符号的 8 位字段中表示,因此适用标准第 6.3.1.3 节中的最后一条规则:
否则,新类型是有符号的,值不能在其中表示;结果是实现定义的,或者引发了实现定义的信号。
如果你想要这个值-2
,写-2
。
0xfe
不是, -2
是254
。
如果您愿意-2
,请使用“ -2
”(-0x02
如果您真的想使用十六进制,请使用“”)。
在 C 中,0xfe
从不意味着 -2。另一方面,-2有时可能意味着 0xfe(如果转换,隐式或显式,为unsigned char
)。
就像其他答案所说,如果你想要-2,你应该使用-2。
0xfe 有时可能表示 -2 是正确的,但这完全取决于存储值的数据类型。如果只写 0xfe,它将被解释为 int,意思是 254。如果将其存储在有符号字符中(一个字节,8位,范围-128到127),应该解释为-2。在 c/c++ 中,此数据类型称为char,我认为 C# 将其称为 byte,但我不确定。