返回什么 0xfe + ceil(x) 返回

What does return 0xfe + ceil(x) return?

本文关键字:返回 什么 0xfe ceil      更新时间:2023-10-16

据我了解,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它将被解释为一个整数,意思是254。如果将其存储在有符号字符(一个字节,8 位,范围为 -128 到 127)中,则应将其解释为 -2。在C/C ++中,这种数据类型称为char,我认为C#称为字节,但我不确定。