Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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
C++ 获取0或依赖于布尔值的值的好方法是什么?_C++_Bitwise Operators_Mathematical Optimization - Fatal编程技术网

C++ 获取0或依赖于布尔值的值的好方法是什么?

C++ 获取0或依赖于布尔值的值的好方法是什么?,c++,bitwise-operators,mathematical-optimization,C++,Bitwise Operators,Mathematical Optimization,我目前正在编写一段代码,它非常简单地使用布尔值来查看屏幕是否垂直翻转。 这是通过以下方式完成的: glOrtho(0.0f, _width, flip ? 0.0f : _height, flip ? _height : 0.0f, -1.0f, 1.0f); 我想知道是否有更优化的方法来实现这一点,例如: glOrtho(0.0f, _width, !flip * _height, flip * _height, -1.0f, 1.0f); 还是按位操作可以工作 谢谢你的反馈 您确定这是您

我目前正在编写一段代码,它非常简单地使用布尔值来查看屏幕是否垂直翻转。 这是通过以下方式完成的:

glOrtho(0.0f, _width, flip ? 0.0f : _height, flip ? _height : 0.0f, -1.0f, 1.0f);
我想知道是否有更优化的方法来实现这一点,例如:

glOrtho(0.0f, _width, !flip * _height, flip * _height, -1.0f, 1.0f);
还是按位操作可以工作



谢谢你的反馈

您确定这是您程序中的瓶颈吗??不要为了一点小收获而过早优化和混淆代码。

你确定这是程序中的瓶颈吗??不要为了一点小收获而提前优化和混淆代码。

一般来说,
布尔值?floatValue:0.0f
等于
布尔值*floatValue

一般来说,
布尔值?floatValue:0.0f
等于
布尔值*floatValue

+1。绝对地无论如何,编译器很可能会找到比乘法更好的优化方法。让它去做它的工作吧。我理解代码可执行性的必要性,我想这更像是一个假设性的问题。我想我稍后会出于兴趣检查编译器优化。感谢您的快速回复:)。+1。绝对地无论如何,编译器很可能会找到比乘法更好的优化方法。让它去做它的工作吧。我理解代码可执行性的必要性,我想这更像是一个假设性的问题。我想我稍后会出于兴趣检查编译器优化。感谢您的快速回复:)。考虑到屏幕翻转是一种相对罕见的情况,优化真的是一个值得关注的问题吗?我想,智能编译器无论如何都会对其进行优化。由于该函数很少调用(即使每帧调用一次,它也会被太多事情所抵消),因此它是一个非常不寻常的优化场所。我不知道用一个小跳跃换一个浮点乘法是否有那么好。但你也可以将
\u height
重新解释为int,并用
flip
-flip
重复解释它。正如我所说,这更多的是一个假设性问题,我想我应该用不同的方式问这个问题,但是在任何情况下,我都会检查一下编译器是怎么做的。鉴于屏幕翻转是一种相对罕见的情况,优化真的是一个问题吗?我会假设,智能编译器无论如何都会优化它。因为这个函数很少被调用(即使每帧调用一次,它也会被太多事情所抵消),这是一个非常不寻常的优化场所。我不知道用一个小跳跃换一个浮点乘法是否有那么好。但你也可以将
\u height
重新解释为int,并用
flip
-flip
重复解释它。正如我所说,这更多的是一个假设性问题,我想我应该问不同的问题,但无论如何,我会检查编译器做了什么。是的,但一个比另一个快吗?@Oli:可能,考虑到三元运算符本质上是一个条件语句,但这还不足以让我担心。@Oli:一般来说,我认为第一个运算符应该更快,因为它本质上是
testb
,第二个运算符涉及浮点数学。@Vlad Lazarenko:它非常依赖于实现(并非所有CPU都有
testb
),但浮点运算通常比内存加载更便宜。我想这要看情况而定,对吧?如果寄存器中已经有了浮点运算,那么测试布尔运算和返回浮点运算应该比FP运算快,即使是MMX运算。我主要谈论的是英特尔的内核。它应该经过测试才能确定。但我不认为它比FP运算更糟,除非是这样一个瓶颈,我对此表示怀疑。是的,但是一个比另一个快吗?@Oli:可能吧,因为三元运算符本质上是一个条件语句,但还不足以让我担心它。@Oli:一般来说,我认为第一个应该更快,因为它本质上是
testb
,第二个涉及浮点数学@Vlad Lazarenko:它非常依赖于实现(并非所有CPU都有
testb
),但浮点运算通常比内存加载更便宜。我想这要看情况而定,对吧?如果寄存器中已经有了浮点运算,那么测试布尔运算和返回浮点运算应该比FP运算快,即使是MMX运算。我主要谈论的是英特尔的内核。它应该经过测试才能确定。但我不认为它比FP运算更糟,除非是这样我怀疑这是个瓶颈。