分支自由饱和

时间:2015-06-24 20:46:14

标签: bit-manipulation branch

我有以下计算:

$scope.validate_category = function($index) {
    return($scope.selected_category[$index] !== null 
    && $scope.selected_category[$index] !== undefined);
}

是否可以将第二行转换为无分支格式?

谢谢!

2 个答案:

答案 0 :(得分:2)

试试这个:

  b = (a >= 4) * 4 + (a < 4) * ((a >> 1) & 1) * 2 + (a < 4) * (a & 1);

说明:我们返回4&#34;归零&#34;如果a> = 4,则2个最低有效位。 4,我们使用这两个最低有效位。

答案 1 :(得分:1)

您可以使用有条件应用的面具:

unsigned int a, b, t, m;
t = a - 4;
m = 0 - ((int)t < 0); // mask of all 0s or all 1s
b = (t & m) + 4; // mask all 1s: b=a-4+4;  mask all 0s: b=4