c中的三向条件来确定两个数字的符号等价物

c中的三向条件来确定两个数字的符号等价物,第1张

概述我需要最有效的方法(在cpu循环中)来确定两个数字是否具有相同/不同的符号.但是,如果任一数字为零,我需要能够将其与具有相同/不同符号的数字区分开(即,零被视为“第三”).以下代码与我所需要的类似,但返回值只要只有三个不同的返回值即可. int foo(int x, int y) { if (x * y > 0) return 1; if (x * y < 0) return -1 我需要最有效的方法(在cpu循环中)来确定两个数字是否具有相同/不同的符号.但是,如果任一数字为零,我需要能够将其与具有相同/不同符号的数字区分开(即,零被视为“第三”).以下代码与我所需要的类似,但返回值只要只有三个不同的返回值即可.
int foo(int x,int y) {    if (x * y > 0) return 1;    if (x * y < 0) return -1;    return 0;}

对于我的具体问题,值在[-6,6]范围内,X保证不为0.我找到一个解决方案来查找两个数字是否具有相同的符号,并更改它以获得以下解决方案.

return y? (((x^y) >= 0)? 1 : -1) : 0;

应该有一些bitops /比较,比使用乘法,分支,比较的结果更快.

解决方法 这是另一个版本(具有丑陋,非便携式位 *** 作技巧):
int foo(int x,int y) {    return ((x^y) >> 4) - ((x^(-y)) >> 4);}

一些解释:

>((x ^ y)> 4)如果x和y中的一个恰好为负,则为-1,否则为0.>((x ^( – y))>> 4)如果x和-y中的一个恰好为负,否则为0.>如果x> 0和y> 0,结果将为0 – (-1)= 1.>如果x < 0和y < 0,结果将为0 - (-1)= 1.>如果x> 0和y = 0,结果将为0 – 0 = 0.>如果x < 0和y = 0,结果将为(-1) - (-1)= 0.>如果x> 0和y < 0,结果将为(-1) - 0 = -1.>如果x < 0和y> 0,结果将为(-1) - 0 = -1. 假设二进制补码算术,并假定>>转移符号扩展.

总结

以上是内存溢出为你收集整理的c中的三向条件来确定两个数字的符号等价物全部内容,希望文章能够帮你解决c中的三向条件来确定两个数字的符号等价物所遇到的程序开发问题。

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

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

原文地址:https://54852.com/langs/1252418.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存