Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将任何数字转换为1或-1,并通过位运算符保留符号?_Javascript_Bitwise Operators - Fatal编程技术网

Javascript 如何将任何数字转换为1或-1,并通过位运算符保留符号?

Javascript 如何将任何数字转换为1或-1,并通过位运算符保留符号?,javascript,bitwise-operators,Javascript,Bitwise Operators,给定任何数字,例如345.678和-345.678,我想要的是将345.678转换为1,-345.678转换为-1。 基本上,我想将任何数字转换为1或-1,符号通过位运算符保留 虽然我不知道为什么,但我可以将任何数字转换为-1,如下所示: 345.678 | -1 有什么想法吗?对于[-2147483648,+2147483647]间隔中的任何整数N,您可以执行以下操作: (N >> -1) | 1 如果N为负,则结果为-1;如果N为正,则结果为1。 对于零,结果值为1 注: 它

给定任何数字,例如345.678和-345.678,我想要的是将345.678转换为1,-345.678转换为-1。 基本上,我想将任何数字转换为1或-1,符号通过位运算符保留

虽然我不知道为什么,但我可以将任何数字转换为-1,如下所示:

345.678 | -1

有什么想法吗?

对于
[-2147483648,+2147483647]
间隔中的任何整数
N
,您可以执行以下操作:

(N >> -1) | 1
如果
N
为负,则结果为-1;如果
N
为正,则结果为1。 对于零,结果值为1

注: 它不适用于区间
(-1,0)
(结果值是1而不是-1)中的小数。但是,它应该适用于任何其他十进制数

如果您希望它适用于每一个十进制数,那么解决方法很简单:

(Math.floor( N ) >> -1) | 1

但是你不能只使用位运算符。

你可以接受这个问题的想法

并通过按位或而不是按位调整结果,得到
1
而不是
0
-1
而不是
1

const sign=x=>(x>>31)| 1;
控制台日志(符号(345.678));

控制台日志(符号(-345.678))是否必须使用位运算来转换和保留符号?为什么不使用像
(值>0)这样的简单三值运算?1:-1
?绝对不平凡,因为按位运算符通过切掉最高有效位将64位浮点数转换为32位整数。减1是由二进制中的1组成的,这就是为什么
number |-1
的结果总是-1。我怀疑是否有办法使用单位运算符获得符号。检查这个答案这可能对你有用。但它涉及移位和算术运算符。你也可以只做
数学。符号
,但OP要求进行位运算。乘法和加法不是按位的。我们不清楚是否应该只使用位运算符。但是我会回来一个改进的版本,现在只使用位运算符。
number>-1
实际上做什么?它似乎没有移动,除非它是
number>>31
的简写形式,-0.345678的结果是错误的,间隔
-1
中的任何数字都会得到错误的结果。也就是说,因为按位运算符将值分层,所以较小的值是错误的。
(x >> 31) & 1