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

时间:2011-05-13 04:50:23

标签: c# c++ c hex ceil

据我所知,C应该将0xfe转换为-2,所以返回应该是ceil(x) - 2 - 但是函数似乎都没有返回。 int m(double x){return 0xfe + ceil(x)}应该返回什么?

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:7)

0xfe -2,它是254

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

与其他答案一样,如果你想要-2,你应该使用-2。

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