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

ina*_*ina 0 c c# c++ hex ceil

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

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

Ste*_*non 10

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

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

(int8_t)0xfe
Run Code Online (Sandbox Code Playgroud)

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

否则,新类型将被签名,并且值无法在其中表示; 结果是实现定义的,或者引发实现定义的信号.

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


Jam*_*lis 7

0xfe不是 -2,它是254.

如果需要-2,请使用" -2"(或-0x02"如果你真的想使用十六进制").