繁体   English   中英

在JavaScript中从头到尾提取位

[英]Extract bits from start to end in javascript

在Java脚本中,我想从整数中提取13至16位。 示例:如果我从数字16640中提取13至16位,则输出将为2

我在Google上进行搜索,发现链接很少,但是它们都是C语言的。

假设您的位数从0开始:

var extracted, orig;

orig = parseInt("16640", 10); // best practice on using parseInt: specify number base to avoid spurious octal interpretation on leading zeroes (thx Ken Fyrstenberg)
extracted = ((orig & ((1 << 16) - 1) & ~(((1 << 13) - 1))) >>> 13);

说明:

  • 掩盖原始数字的低16位
  • 屏蔽结果的低13位的补码(即13-31位)
  • 您目前在其原始位置有原始号码的13-16位。 将此位模式右移13位。

请注意,此方法仅对小于2 ^ 31的数字可靠地起作用。 文档(MDN)在这里

Javascript的按位运算的工作原理与C语言相同:

var bits13to16 = (number >> 13) & 15;

这会将数字13位右移(消除了0-12位),并屏蔽了除最后4个剩余位(以前是13-16位)以外的所有位。 15 = 2 ^ 4-1。

所有建议都有效,但我认为最简单的建议是@dandavis。

parseInt(16640 .toString(2).slice(-16,-13),2);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM