加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如果在不使用任何关系运算符的情况下> = 1,有没有办法将整数

发布时间:2020-12-16 10:06:15 所属栏目:百科 来源:网络整理
导读:在我的程序中,我在循环中有如下语句. y = (x = 1)? 0:1; 但是,我想避免使用任何关系运算符,因为我想使用SIMD指令,并且不确定关系运算符是否适用于SIMD. 我想要类似下面这样的东西. a = some_operation(x) // a will be either 1 or 0y = 1 - a some_operatio
在我的程序中,我在循环中有如下语句.

y = (x >= 1)? 0:1;

但是,我想避免使用任何关系运算符,因为我想使用SIMD指令,并且不确定关系运算符是否适用于SIMD.

我想要类似下面这样的东西.

a = some_operation(x) // a will be either 1 or 0
y = 1 - a

some_operation会将任何数字等于或大于1转换为1,并保持0到0.所以,我的问题是,是否有任何some_operation可以实现我的目的?

解决方法

#define INT_BITS (CHAR_BIT * sizeof(int))

int make_zero_or_one(int x) {
   return 1 - (((x-1) >> (INT_BITS-1)) & 1);
}

与其他答案一样,这取决于MSB是整数中的符号位.对于所有整数,该函数返回0< = 0,否则返回1.如果x-1溢出,该函数将失败. 此实现在编译代码中没有分支.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读