【问题标题】:How to find the value of a byte in a large integer efficiently如何有效地查找大整数中字节的值
【发布时间】:2011-03-27 04:18:32
【问题描述】:

我想在一个大整数中找到一个字节的值。比如数字

11973777 = 10110110 10110100 10010001

我想找到那个

11973777[2] = 10110110 = 182
11973777[1] = 10110100 = 180 
11973777[0] = 10010001 = 145

而且这样做很有效(按位运算)。我可以通过按位运算轻松找到数字中任何位置的位值,但我不想为了获取字节而执行 8 次,或者向左移动然后向右移动。这被标记为 javascript,因为我在 javascript 中执行此操作,但我想可以翻译按位运算。提前感谢您提供的任何帮助。

【问题讨论】:

  • SHIFT RIGHT 和 AND 会不会不可接受? var num = 11973777; while (num > 0) { result.push(num&0xff); num = num >> 8; }

标签: javascript bit-manipulation


【解决方案1】:

在某种程度上,你必须移位:

var num = 11973777;
var lastByte = num & 0xFF;
var midLowByte = (num >> 8) & 0xFF;
var midHighByte = (num >> 16) & 0xFF;
var highByte = (num >> 24) & 0xFF;

但你总是可以将逻辑封装在一个函数中以使其更方便,例如:

window.getBytes = function(num) {
    return [num & 0xFF, (num >> 8) & 0xFF, (num >> 16) & 0xFF, (num >> 24) & 0xFF];
};

var numBytes = getBytes(11973777);
alert(numBytes[0] + "," + numBytes[1] + "," + numBytes[2] + "," + numBytes[3]);

【讨论】:

  • 谢谢,这正是我所需要的,我正在考虑这样的事情,但无法让它正常工作
猜你喜欢
  • 1970-01-01
  • 2014-03-03
  • 1970-01-01
  • 1970-01-01
  • 2019-09-01
  • 2014-05-13
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
相关资源
最近更新 更多