国际空间研究组织 | ISRO CS 2017 |问题 67
考虑代码段
int i, j, x, y, m, n;
n=20;
for (i = 0, i < n; i++)
{
for (j = 0; j < n; j++)
{
if (i % 2)
{
x + = ((4*j) + 5*i);
y += (7 + 4*j);
}
}
}
m = x + y;
以下哪一项是错误的
(A)代码包含循环不变计算
(B)这段代码中有公共子表达式消除的范围
(C)本规范存在强度折减范围
(D)此代码中存在死代码消除范围答案: (D)
解释:选项 (D) 是错误的,因为在死代码消除技术中,它按照名称建议删除死代码。代码语句称为死代码,其中代码要么永远不会执行,要么无法访问,或者它们的输出永远不会被使用,但这里不是这种类型的语句或代码。
在这里,我们通过用 4 << j 替换“ 4 * j ”来减少强度降低,并且代码具有公共子表达式以及循环不变计算。
这个问题的测验