【发布时间】:2023-03-20 19:28:02
【问题描述】:
当然,我问的是返回的实际“位数据”。
换句话说,以下函数能否返回false:
bool func(uint x, uint y)
{
return x / y == (uint)((int)x / (int)y);
}
?
【问题讨论】:
-
uint到底是什么?为什么要发明自己的 typedef 语言而不是使用标准化类型? -
此外,在过时的 C90 ("ANSI-C") 中存在一个语言错误,其中未指定除法的舍入方向与负数。这在 1999 年得到修复,C90 被撤回。如果您使用的是非常旧的编译器,它仍然可能是个问题。
-
这个问题更多的是关于整数算术而不是关于 C。它也可能是 C++ 或任何其他强类型语言。我使用 C 只是为了给出一个更具体的例子来说明我的意思。
-
我刚刚给了你一个完美的例子,说明为什么确切的语言和版本很重要。 C 和 C++ 都没有称为
uint的类型。在任何一种语言中,这种类型实际对应的内容也很重要。隐式提升和有符号到无符号的转换基于类型的大小发生。所以用一些伪代码例子来讨论这个是没有意义的。
标签: c twos-complement integer-division