
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中的三向条件来确定两个数字的符号等价物所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)