如果(n!= 0)n = 0; v / s n = 0;哪个更有效?为什么? [处于保留状态]

问题描述 投票:-2回答:2

当以高级程序员的身份键入程序时,n = 0;看起来更加高效和简洁。

但是n = 0;确实比if (n != 0) n = 0;更有效吗?

  1. n更有可能是0时。

  2. n不太可能是0时。

  3. n绝对不确定时。

语言:C(C90)

编译器:Borland的Turbo C ++

最小可复制代码

void scanf();

void main()
{
int n; // 2 bytes

n=0; // Expression 1

scanf("%d",&n); // Absolutely uncertain

if(n!=0) n=0; // Expression 2

}

注意:我已经提到了上面的代码,仅供您参考。请不要顺其自然。

如果您对上述语言/标准/编译器不满意,请随时以您的首选语言/标准/编译器解释上述3种情况。

c if-statement variables machine-code low-level-code
2个回答
4
投票

如果n是2的补码整数类型或无符号整数类型,那么直接写入n = 0当然不会比带有条件检查的版本慢,并且良好的优化编译器将生成相同的代码。一些编译器将寄存器值与自身进行XOR运算,从而将赋值编译为零,这是一条指令。

如果n是浮点类型,1的补码整数类型或有符号幅度整数类型,则两个代码段的行为不同。例如。例如,如果n的符号为负零。 (确认@chqrlie。)同样,如果n是系统上的指针,但没有多个空指针表示,则当if (n != 0) n = 0;是各种null指针之一时,n将不会分配n。 。 n = 0;赋予其他功能。

“将永远更有效率”是不正确的。如果读取n的成本较低,而写入n的成本较高(考虑重新写入需要重写页面的非易失性存储器),并且可能n == 0,则n = 0;会较慢, lessif (n != 0) n = 0;更有效率。


2
投票

n = 0;

由于没有条件检查,所以总会更有效率。

https://godbolt.org/z/GEzfcD

© www.soinside.com 2019 - 2024. All rights reserved.