早教吧 育儿知识 作业答案 考试题库 百科 知识分享

算法:使用位运算判断两个数是否同为正,或同为负网上给出的示例代码如下:booleanisSameSign(intx,inty){//有0的情况例外,^相同得0,不同得1return(x^y)>=0;//true表示x、y有相同的符号,false表示x、y

题目详情
算法:使用位运算判断两个数是否同为正,或同为负
网上给出的示例代码如下:
boolean isSameSign(int x,int y){ //有0的情况例外,^相同得0,不同得1
return (x^y)>= 0;//true表示x、y有相同的符号,false表示x、y有相反的符号
}
如果两个数都是正数,则二进制的第一位均为0,x^y=0
如果两个数都是负数,则二进制的第一位均为1,x^y=0
如果两个数符号相反,则二进制的第一位相反,x^y=1
但是为什么判断条件是>=0呢?难道还有小于0的情况?直接在0和1之前判断不就行了嘛?网上的示例是不是错了呢?
▼优质解答
答案和解析
示例没有错,如果符号相反,那么异或之后所得数字符号为肯定为1,其他的非符号为取值可为0,可为1,那么此时得出的相异或的结果肯定是一个小于0的数据(最大为-1),反之如果符号相同,则符号为为0,最小为0,比较结果返回布尔值.示例代码没错的