所以我的问题是,我如何用位操作符替换
我有一个函数,它接受一个小数,并将其转换为一个带二进制指数的整数。
例如,get_whole_number(10.5)
将返回=> 21, 1
,其中
21
为整型1
是2
的幂,必须除以21
才能得到原始浮点数(21/(2**1) = 10.5
)。
到目前为止,我有这个函数,它工作但是效率低,速度慢:
function get_whole_number(number, exponent=0) {
if(number%1 == 0) return [number, exponent];
exponent++;
number *= 2;
if(exponent >= 500) return [Math.round(number), exponent];
return get_whole_number(number, exponent);
};
console.log(
get_whole_number(1.125).join("/2^"));
为了使它更快,我想用位操作替换一些操作,特别是number%1
和Math.round
。
所以我的问题是,我如何用位操作符替换% 1
和round()
?
我想我可以使用:
if((number & number) == number)
代替if(number%1 == 0)
因为逐位操作忽略数字的小数部分;但这只是有时有效。(number | number)
而不是Math.round(number)
,但这只是截断值。
您可以替换Math。按双反位进行舍入~~
function get_whole_number(number, exponent=0) {
if(number%1 == 0) return [number, exponent];
exponent++;
number *= 2;
if(exponent >= 500) return [~~(number), exponent];
return get_whole_number(number, exponent);};