据我所知,C应该将0xfe转换为-2,所以返回应该是ceil(x) - 2 - 但是函数似乎都没有返回。 int m(double x){return 0xfe + ceil(x)}
应该返回什么?
为这个新手问题道歉。我不是一般的C程序员。刚学习十六进制和C.
答案 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#称之为字节,但我不确定。