如果(n!= 0)n = 0; v / s n = 0;哪个更有效?为什么?

时间:2019-11-09 20:50:44

标签: c if-statement variables machine-code low-level-code

在将程序键入为高级程序员时,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种情况。

2 个答案:

答案 0 :(得分:5)

如果<select className="custom-select d-block w-100" value={this.state.listTodos} name="relatedTodos" onChange={this.handleInputChange}> 是2的补码整数类型或无符号整数类型,那么直接写入n肯定不会比带有条件检查的版本慢,并且良好的优化编译器将生成相同的代码。一些编译器会在将寄存器值与自身进行XOR运算时将赋值编译为零,这是一条指令。

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

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

答案 1 :(得分:3)

n = 0;

由于没有条件检查,因此始终会更有效率。

https://godbolt.org/z/GEzfcD