相关疑难解决方法(0)

以唯一且确定的方式将两个整数映射到一个整数

想象一下两个正整数A和B.我想将这两个整数组合成一个整数C.

可能没有其他整数D和E组合为C.因此将它们与加法运算符组合不起作用.例如30 + 10 = 40 = 40 + 0 = 39 + 1连接也不起作用.例如"31"+"2"= 312 ="3"+"12"

这种组合操作也应该是确定性的(总是在相同的输入下产生相同的结果)并且应该总是在整数的正侧或负侧产生整数.

mapping algorithm math integer deterministic

218
推荐指数
8
解决办法
9万
查看次数

静态变量可以用静态常量初始化吗?

这个答案中,我基本上需要static int n = -1;一个函数。我想避免到处都是幻数,所以我改用了这个:

double f(int i)
{
    static const int sentinel = -1;
    static int n = sentinel;

    if (n == sentinel)
    // ...
}
Run Code Online (Sandbox Code Playgroud)

然而有人指出,这不符合标准,因为sentinel它不是(编译时)常量。

这对我来说很有意义,因为我知道在 C++ 的编译时表达式(例如数组的大小)中可以使用常量整数。然而,gcc、clang 和 icc >v16 编译此代码时没有任何警告。只有 icc <=v16 和 MSVC 给出了这个警告/错误(参见Godbolt)。

C标准怎么说?这在不同版本的标准(c90、c99、c11)之间会发生变化吗?如果这不符合,我们可以在 gcc 和 clang 上得到警告吗?如果符合,为什么旧​​的 icc 和 MSVC 会出错?

c language-lawyer

7
推荐指数
1
解决办法
84
查看次数

标签 统计

algorithm ×1

c ×1

deterministic ×1

integer ×1

language-lawyer ×1

mapping ×1

math ×1