什么返回 0xfe + ceil(x) 返回?
据我了解,C 应该将 0xfe 转换为 -2,因此返回应该是 ceil(x) - 2 - 但该函数似乎不返回其中任何一个。 int m(double x){return 0xfe + ceil(x)}
应该返回什么?
对于这个新手问题表示歉意。一般来说,我不是一个 C 程序员。刚刚学习十六进制和C。
As I understand, C should convert 0xfe to -2, so the return ought to be ceil(x) - 2 - but the function seems to return neither of those. What should int m(double x){return 0xfe + ceil(x)}
return?
Apologies for this newbie question. I am not a C programmer in general. Just learning about hex and C.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
在 C 语言中,
0xfe
是十六进制int
文字。具体来说,它等于254
,因此结果是双精度值ceil(x) + 254.0
。如果您显式转换为
int8_t
或其他8位有符号类型,如下所示:那么您可能得到值-2,但这是不受标准保证。这是因为
0xfe
的值为 254,该值无法在带符号的 8 位字段中表示,因此适用标准第 6.3.1.3 节中的最后一条规则:如果您想要值
-2
,请写入-2
。In the C language,
0xfe
is a hexadecimalint
literal. Specifically, it is equal to254
, so the result is the double-precision valueceil(x) + 254.0
.If you explicitly convert to
int8_t
or another 8-bit signed type, like so:then you may get the value -2, but this is not guaranteed by the standard. This is because
0xfe
has the value 254, which is not representable in a signed 8-bit field, so the last rule in section 6.3.1.3 of the standard applies:If you want the value
-2
, write-2
.0xfe
不是-2
,而是254
。如果您想要
-2
,请使用“-2
”(如果您确实想使用十六进制,则使用“-0x02
”)。0xfe
is not-2
, it is254
.If you want
-2
, use "-2
" (or "-0x02
" if you really want to use hex).在 C 语言中,
0xfe
从不 表示 -2。另一方面,-2 有时可以表示 0xfe(如果隐式或显式转换为unsigned char
)。In C,
0xfe
never means -2. On the other hand, -2 can sometimes mean 0xfe (if converted, implicitly or explicitly, tounsigned char
).就像其他答案所说,如果你想要-2,你应该使用-2。
0xfe 有时可以表示 -2,这是正确的,但这完全取决于存储值的数据类型。如果您只写 0xfe,它将被解释为 int,并且表示 254。如果您将其存储在有符号字符中(一个字节,8位,范围是-128到127),应该解释为-2。在 c/c++ 中,这种数据类型称为 char,我认为 C# 将其称为字节,但我不确定。
Like the other answers said, if you want -2, you should use -2.
It is correct that 0xfe can sometimes mean -2, but this is entirely dependent on the datatype the value is stored in. If you only write 0xfe it will be interpreted as an int, and mean 254. If you store it in a signed char (a byte, 8 bits with the range of -128 to 127), it should be interpreted as -2. In c/c++ this datatype is called char, I think C# calls it byte, but I am not sure.