相关疑难解决方法(0)

在单CPU指令中可以在0和1之间翻转位/整数/布尔值的任何可能代码

单个x86指令可以在"0"和"1"之间切换布尔值吗?

我想到了以下方法,但都导致了两个指令与-cc标志的gcc.

status =! status;

status = 1 - status;

status  = status == 0 ? 1: 0;

int flip[2] = {1, 0};
status = flip[status];
Run Code Online (Sandbox Code Playgroud)

有更快的方法吗?

这就是我尝试过的:https://godbolt.org/g/A3qNUw


我需要的是一个切换输入和返回的函数,以编译为一条指令的方式编写.与此功能类似的东西:

int addOne(int n) { return n+1; }
Run Code Online (Sandbox Code Playgroud)

将Godbolt编译为:

  lea eax, [rdi+1]    # return n+1 in a single instruction
  ret
Run Code Online (Sandbox Code Playgroud)

c c++ x86 assembly micro-optimization

3
推荐指数
1
解决办法
764
查看次数

if-else样式和优化

如果某个函数的行为取决于一系列条件,则可以使用不同的if-return块或一系列if-else块来计算它.示例计算模式:

void f(params) // isolated if-blocks
{
    if (cond1) {
       // computational steps
       return;
    }

    if (cond2) {
       // computational steps
       return;
    }

    // computational steps of last case
 }

 void f() // unique if-else block
 {
    if (cond1) {
       // computation
    } else if (cond2) {
       // computation
    } else { // last condition
       // computation
    }
 }
Run Code Online (Sandbox Code Playgroud)

我会说第一个总是更具可读性,但我不知道第二个是否最好来自设计(易于维护/错误)或性能(分支预测/编译器优化)的观点.

这两种方法的优点和缺点是什么?我没有考虑过其他什么?

c++ optimization if-statement

2
推荐指数
1
解决办法
280
查看次数

有没有理由使用switch语句而不是if和elseif的字符串?

可能重复:
切换if-else语句的优点
为什么switch语句而不是if-else?

switch语句似乎完全没用.它能做的任何事情都可以通过if和else来完成.

他们甚至可能编译成相同的代码.

那么为什么要费心呢?

break交换机中的语句label:让我发疯,这种格式让我想起了goto.

这是针对objective-c,c,C++的.我不确定vb.net是否有switch语句,但即使它确实如此,我必须忘记因为我从来没有使用它.

c c++ if-statement objective-c switch-statement

-2
推荐指数
1
解决办法
1615
查看次数

switch语句或if语句的资源成本是否较低?

我正在使用c ++编写一个2D引擎,我知道一个if语句在CPU使用率方面的成本低于switch语句; 但是,switch声明和if声明之间的区别是现代PC甚至是移动端口可忽略不计,还是我必须switch不惜一切代价避免?

c++

-2
推荐指数
1
解决办法
517
查看次数