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

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

概述在我的程序中,我在循环中有如下语句. y = (x >= 1)? 0:1; 但是,我想避免使用任何关系运算符,因为我想使用SIMD指令,并且不确定关系运算符是否适用于SIMD. 我想要类似下面这样的东西. a = some_operation(x) // a will be either 1 or 0y = 1 - a some_operation会将任何数字等于或大于1转换为1,并保持0到0. 在我的程序中,我在循环中有如下语句.

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

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

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

a = some_operation(x) // a will be either 1 or 0y = 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溢出,该函数将失败. 此实现在编译代码中没有分支.

总结

以上是内存溢出为你收集整理的如果在不使用任何关系运算符的情况下> = 1,有没有办法将整数转换为1?全部内容,希望文章能够帮你解决如果在不使用任何关系运算符的情况下> = 1,有没有办法将整数转换为1?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1217682.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存