检查两个整数是否具有相同的符号

Chr*_*oph 10 javascript

我正在寻找一种有效的方法来检查两个数字是否具有相同的符号.

基本上我正在寻找比这更优雅的方式:

var n1 = 1;
var n2 = -1;

( (n1 > 0 && n2 > 0) || (n1<0 && n2 < 0) )? console.log("equal sign"):console.log("different sign");
Run Code Online (Sandbox Code Playgroud)

使用按位运算符的解决方案也可以.

Jas*_*all 40

你可以将它们相乘; 如果他们有相同的标志,结果将是积极的.

bool sameSign = (n1 * n2) > 0
Run Code Online (Sandbox Code Playgroud)

  • 如果`n1`和`n2`都是正整数然后乘以它们会导致整数过低怎么办? (19认同)
  • 如果`n1`和`n2`都为零怎么办? (3认同)

use*_*466 16

代码字符较少,但可能会溢出:

n1*n2 > 0 ? console.log("equal sign") : console.log("different sign or zero");
Run Code Online (Sandbox Code Playgroud)

或者没有整数溢出,但略大:

(n1>0) == (n2>0) ? console.log("equal sign") : console.log("different sign");
Run Code Online (Sandbox Code Playgroud)

如果你认为0为正,那么>应该用<替换

  • 如果`n1`和`n2`都是正整数然后乘以它们会导致整数过低怎么办? (2认同)

wil*_*iam 6

使用按位xor

n1^n2 >= 0 ? console.log("equal sign") : console.log("different sign");
Run Code Online (Sandbox Code Playgroud)

  • 测试`<0`将使它变小一个char;) (2认同)

tsh*_*tsh 5

基于您如何为特殊值定义“相同符号”:

  • 确实NaNNaN具有相同的符号?

如果您的回答为“否”,则答案为:

Math.sign(a) === Math.sign(b)
Run Code Online (Sandbox Code Playgroud)

如果您的回答是“是”,则答案是:

Object.is(Math.sign(a) + 0, Math.sign(b) + 0)
Run Code Online (Sandbox Code Playgroud)