javascript中的位移位

javascript中的位移位,javascript,bit-manipulation,Javascript,Bit Manipulation,我有一个数值,比如 var x = 13434235234334; 我想把它移到左边或右边。例如: x >> 2 或 x原始值,x本身不会因位移位操作而改变 var x=511; var y=x>>4; var z=x<<3; /* x=511 y=31 z=4088 */ var x=511; 变量y=x>>4; var z=X位移位的问题是移位的位被丢弃。如果您想要原始数字,那么将其存储在一个变量中。关于大数字,Javascript中的位移位只适用

我有一个数值,比如

var x = 13434235234334;
我想把它移到左边或右边。例如:

x >> 2 


x原始值,
x
本身不会因位移位操作而改变

var x=511;
var y=x>>4;
var z=x<<3;
/*
x=511
y=31
z=4088
*/
var x=511;
变量y=x>>4;

var z=X位移位的问题是移位的位被丢弃。如果您想要原始数字,那么将其存储在一个变量中。关于大数字,Javascript中的位移位只适用于整数
13434235234334
最初被解析为double,但位移位将其转换为整数(随后溢出)。所以这不能按照你想象的方式来做。试着打印
x | 0
,你会看到的。这要看情况而定。移位会在移位的一侧减少移位的位数,在相反的一侧减少零填充。如果幸运的话,只有零被删除(例如,当你在小数字上向左移动时),你可以通过向相反方向移动相同的量来重新创建原始值,但在大多数情况下,这不会发生,除非你将原始值存储在其他地方,否则你无法恢复原始值。除以4,然后使用
Math.floor(x)
而不是
x
。乘以4再次返回原始值。。。但说真的,为什么不留一份呢?说x不知怎么被改变了。。。如何仅使用位移位就可以获得值?@Draconar取决于操作。在汇编程序中,通常有旋转指令,我想它保留了一些信息,可以让您重建原始值。但是在不支持旋转、只支持位移动的语言中,很可能会因为位移动和操作而丢失信息,从而使原始值无法恢复。要么拥有原始
x
的副本,要么在以后需要其值时不要对其进行篡改。@Draconar也可以使用
((x>(32-r))
和/或
((x>>>r)|(x@jongo45:查看原始建议值
x
。它超出了Javascript中简单位操作的范围——这需要用JS编写完整的BigInt实现。
var x=511;
var y=x>>4;
var z=x<<3;
/*
x=511
y=31
z=4088
*/