Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用!(x-a)而不是C中的x==a_C_Performance_Memory - Fatal编程技术网

使用!(x-a)而不是C中的x==a

使用!(x-a)而不是C中的x==a,c,performance,memory,C,Performance,Memory,我正在写一个C程序,可以做很多比较,我想知道这是否真的节省了内存 感谢任何帮助不,没有。使用一个复杂的语法来做一些众所周知的语法的事情从来都不是正确的答案。您应该使用x==a。不,它没有。使用一个复杂的语法来做一些众所周知的语法的事情从来都不是正确的答案。您应该使用x==a.这取决于x和a的类型,以及!x-a可能与x==a的不同。这些差异可能是有益的、有害的,也可能是无关紧要的,这取决于人们试图做什么。在它们有用的情况下,应该有一条注释,指出语义与x==a的区别,以及为什么这很重要 例如,如果x

我正在写一个C程序,可以做很多比较,我想知道这是否真的节省了内存


感谢任何帮助

不,没有。使用一个复杂的语法来做一些众所周知的语法的事情从来都不是正确的答案。您应该使用x==a。

不,它没有。使用一个复杂的语法来做一些众所周知的语法的事情从来都不是正确的答案。您应该使用x==a.

这取决于x和a的类型,以及!x-a可能与x==a的不同。这些差异可能是有益的、有害的,也可能是无关紧要的,这取决于人们试图做什么。在它们有用的情况下,应该有一条注释,指出语义与x==a的区别,以及为什么这很重要

例如,如果x和a都是等于正无穷大的浮点值,则x==a将产生1,但计算x-a将产生NaN,并应用!运算符的值为零


我不知道有任何关于x==a和!a-x,因此任何使用后一种形式但没有说明为什么要可疑地查看的代码。

根据x和a的类型,其语义!x-a可能与x==a的不同。这些差异可能是有益的、有害的,也可能是无关紧要的,这取决于人们试图做什么。在它们有用的情况下,应该有一条注释,指出语义与x==a的区别,以及为什么这很重要

例如,如果x和a都是等于正无穷大的浮点值,则x==a将产生1,但计算x-a将产生NaN,并应用!运算符的值为零

我不知道有任何关于x==a和!因此,任何使用后一种形式的代码,如果没有说明为什么应该可疑地查看。

!x-a而不是x==a

x==更好的

作为指针x,a,x==a定义得很好。x-a是未定义的行为,除非x是同一对象中/附近的两个点

作为符号整数x,a,x==a定义良好。x-a is可能会溢出有符号整数范围,然后是未定义的行为

作为浮点x,a,x==a定义得很好。x-a可能会产生意想不到的影响

将x作为数组中的指针,将a作为int,x-a可以很好地生成一个新地址和!x-a是0。x==a将尝试从中创建指针,如果该指针是有效指针,则代码将生成0或1

将代码转换为最清晰的代码,并将微优化问题留给编译器处理

通过比较,这肯定是==

在理论层面上,比如说!x-a和x==a对所有a,x具有相同的功能。如果一个编译器的速度比另一个快,那么一个好的编译器将根据两个编译器中速度更快的编译器发出代码

一个较弱的编译器可能会因为程序员比编译器更了解而受益

!x-a而不是x==a

x==更好的

作为指针x,a,x==a定义得很好。x-a是未定义的行为,除非x是同一对象中/附近的两个点

作为符号整数x,a,x==a定义良好。x-a is可能会溢出有符号整数范围,然后是未定义的行为

作为浮点x,a,x==a定义得很好。x-a可能会产生意想不到的影响

将x作为数组中的指针,将a作为int,x-a可以很好地生成一个新地址和!x-a是0。x==a将尝试从中创建指针,如果该指针是有效指针,则代码将生成0或1

将代码转换为最清晰的代码,并将微优化问题留给编译器处理

通过比较,这肯定是==

在理论层面上,比如说!x-a和x==a对所有a,x具有相同的功能。如果一个编译器的速度比另一个快,那么一个好的编译器将根据两个编译器中速度更快的编译器发出代码


一个较弱的编译器可能会因为程序员比编译器更了解而受益

它增加了混乱,就是这样。不,它没有。编译器完全能够对这种形式进行较小的优化,也可以进行更复杂的优化。记住,唯一确定的方法是编写两个版本并对每个版本进行分析。话虽如此,我相信这不会有任何区别,只会让你的代码更难阅读和理解。请注意,如果x-a导致有符号整数算术溢出大正x,大负a,反之亦然,然后你用算术调用未定义的行为,而比较的行为定义得很好。它增加了混乱,就是这样。不,它没有。编译器完全能够对这种形式进行较小的优化,也可以进行更复杂的优化。记住,唯一确定的方法是编写两个版本并对每个版本进行分析。话虽如此,我对此很有信心
除了使代码更难阅读和理解外,没有任何区别。请注意,如果x-a导致有符号整数算术溢出大正x、大负a,或者相反,然后你用算术调用未定义的行为,而比较的行为是完全定义好的。根据上下文,得到一个向上的投票,指出看起来像的东西实际上可能有一些细微的差异。得到一个向上的投票,指出看起来像的东西实际上可能有一些细微的差异,取决于上下文。