如果在不使用任何关系运算符的情况下> = 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溢出,该函数将失败. 此实现在编译代码中没有分支. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |