-1

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

4

2 回答 2

5

如果n是2的补码整数类型或者无符号整数类型,那么n = 0直接写肯定不会比有条件检查的版本慢,一个好的优化编译器会生成同样的代码。一些编译器将赋值编译为零作为寄存器值与自身进行异或,这是一条指令。

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

“将永远更有效率”是不正确的。应该读取n成本低,写入n成本高(想想重写非易失性存储器需要重写一个页面)并且很可能n == 0,那么n = 0;慢,效率if (n != 0) n = 0;

于 2019-11-09T21:00:12.063 回答
3

n = 0;

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

https://godbolt.org/z/GEzfcD

于 2019-11-09T20:58:21.867 回答