如何确定一个数字是正数还是负数?

57

在面试中,我被问到如何确定一个数字是正数还是负数。规则是我们不能使用关系运算符,如<>,也不能使用内置的Java函数(比如substringindexOfcharAtstartsWith),不能使用正则表达式或API。

我对此进行了一些研究,下面给出了代码,但它只适用于整数类型。 但是他们要求我编写一个通用代码,可以处理floatdoublelong

 // This might not be better way!!

 S.O.P ((( number >> 31 ) & 1) == 1 ? "- ve number " : "+ve number );

你有什么想法吗?


3
如果有一种方法可以将[某个东西]转换成一个二进制数组,你可以查看最高位来确定这个数字是正数还是负数... 出于好奇,这样的技能会对你有什么帮助?虽然我还没有工作过,但是...他们会从你手中夺走基本运算符似乎有点奇怪:P - Warty
147
愚蠢而牵强的面试问题 - Mitch Wheat
4
“像这样的技能会如何帮助你?”这个问题是因为,在拥有5年J2EE经验后(我曾被面试Java职位,但却没有预料到他们会问这个问题:(),由于我的计算机科学背景,我感到无法给出解决方案而感到遗憾。 - Dead Programmer
2
@Stephen C:我理解原因。谷歌、微软等公司多年前就意识到这些不是“正确”的面试问题...... - Mitch Wheat
8
然而,面试官的问题不够精确。引用:「我们不应该使用条件运算符」。这个「==」也是一个条件运算符,因此根本无法回答这个问题。括号中的两个运算符(<,>)根本不能作为一个合适的解释。面试官必须使用明确的措辞来表达他的意思,比如说:「关于条件运算符,你只能使用 == 运算符」。调查不精确的问题是程序员生活中真正需要的技能。 - OlimilOops
显示剩余17条评论
32个回答

-2
if(antennaHeight.compareTo(Double.valueOf(0))>=0)

在上面的代码中, antennaHeight.compareTo(Double.valueOf(0)) --- 这将返回一个整数,将其与0进行比较即可得到解决方案。

-3
if (v < 0) System.out.println("negative"); else System.out.println("positive");

从问题中:「规则是我们不应该使用诸如 < 和 > 的条件运算符」。 - Simon MᶜKenzie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接