絶対値関数

分岐不要の絶対値関数です。



条件分岐しないという事は、どれくらいマシンの負担を減らすここが出来るのだろうか......

アセンブラコードに置き換えると、2ステップぐらい減らす事が出来そうですね。




#include <stdio.h>

int myabs(int x);
int mynabs(int x);

int main(int argc,char *argv[])
{
    printf("%d\n",myabs(100));
    printf("%d\n",myabs(-100));
    printf("%d\n",mynabs(100));
    printf("%d\n",mynabs(-100));
    
    return 0;
}

/*  絶対値関数  */
int myabs(int x)
{
    return ((x>>30)|1)*x;
}

/*  絶対値関数マイナス  */
int mynabs(int x)
{
    return -((x>>30)|1)*x;
}