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

发布于 2024-11-07 03:11:53 字数 178 浏览 5 评论 0原文

据我了解,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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

单身狗的梦 2024-11-14 03:11:53

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

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

(int8_t)0xfe

那么您可能得到值-2,但这是不受标准保证。这是因为 0xfe 的值为 254,该值无法在带符号的 8 位字段中表示,因此适用标准第 6.3.1.3 节中的最后一条规则:

否则,新类型是有符号的,并且该值无法在其中表示;结果要么是实现定义的,要么引发实现定义的信号。

如果您想要值-2,请写入-2

In the C language, 0xfe is a hexadecimal int literal. Specifically, it is equal to 254, so the result is the double-precision value ceil(x) + 254.0.

If you explicitly convert to int8_t or another 8-bit signed type, like so:

(int8_t)0xfe

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:

Otherwise, the new type is signed and the value cannot be represented in it; either the result is implementation-defined or an implementation-defined signal is raised.

If you want the value -2, write -2.

又怨 2024-11-14 03:11:53

0xfe不是-2,而是254

如果您想要 -2,请使用“-2”(如果您确实想使用十六进制,则使用“-0x02”)。

0xfe is not -2, it is 254.

If you want -2, use "-2" (or "-0x02" if you really want to use hex).

不…忘初心 2024-11-14 03:11:53

在 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, to unsigned char).

雨落□心尘 2024-11-14 03:11:53

就像其他答案所说,如果你想要-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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文