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
*/