Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何计算一个32位数字在分块为字节时所需的字节数_Javascript_Bit Manipulation - Fatal编程技术网

Javascript 如何计算一个32位数字在分块为字节时所需的字节数

Javascript 如何计算一个32位数字在分块为字节时所需的字节数,javascript,bit-manipulation,Javascript,Bit Manipulation,因此,我们将32位整数分解为8位块: var chunks = [ (num & 0xff000000) >> 24, (num & 0x00ff0000) >> 16, (num & 0x0000ff00) >> 8, (num & 0x000000ff) ] 在计算块之前,您如何知道它将是多少块?基本上,我想知道它是1、2、3还是4字节,然后再将其分块到数组中。32位整数上的一些位技巧之类的 functio

因此,我们将32位整数分解为8位块:

var chunks = [
  (num & 0xff000000) >> 24,
  (num & 0x00ff0000) >> 16,
  (num & 0x0000ff00) >> 8,
  (num & 0x000000ff)
]
在计算块之前,您如何知道它将是多少块?基本上,我想知道它是1、2、3还是4字节,然后再将其分块到数组中。32位整数上的一些位技巧之类的

function countBytes(num) {
  // ???
}

根据您的偏好和/或代码库样式,我可以想到几种方法

第一种方法比另一种方法使用更多的分析数学,其性能比下面的逐位数学方法稍差:

//我们需要一个以16为底的对数,因为您使用的是十六进制
const BASE_16=数学日志(16);
常量log16=(num)=>Math.log(num)/BASE_16;
//这是一个函数,它给出了你得到的非零块的数量
const getNumChunks=(num)=>{
//首先,我们获取数字的以16为底的对数,这将给出位置的数量
//你需要在第16班左转才能拿到你的号码。
常量numNonZeroes=Math.round(log16(num));
//我们需要把这个数除以2,因为你要把比特数除以2
const numChunks=Math.ceil(numNonZeroes/2);
返回numChunks;
}
第二个是严格按位的:

const getNumChunks=(num)=>{
设探头=0xff;
设numChunks=0;
while((probe&num)| | num>probe){

probe=probe根据您的偏好和/或代码库样式,我可以想到几种方法

第一种方法比另一种方法使用更多的分析数学,其性能比下面的逐位数学方法稍差:

//我们需要一个以16为底的对数,因为您使用的是十六进制
const BASE_16=数学日志(16);
常量log16=(num)=>Math.log(num)/BASE_16;
//这是一个函数,它给出了你得到的非零块的数量
const getNumChunks=(num)=>{
//首先,我们获取数字的以16为底的对数,这将给出位置的数量
//你需要在第16班左转才能拿到你的号码。
常量numNonZeroes=Math.round(log16(num));
//我们需要把这个数除以2,因为你要把比特数除以2
const numChunks=Math.ceil(numNonZeroes/2);
返回numChunks;
}
第二个是严格按位的:

const getNumChunks=(num)=>{
设探头=0xff;
设numChunks=0;
while((probe&num)| | num>probe){

probe=probe或此单行程序使用
clz32
函数确定使用了32位无符号整数的多少字节

function numOfBytes( x ) {
    return x === 0 ? 1 : (((31 - Math.clz32( x )) / 8) + 1) | 0;
}

或者,这个单行程序使用
clz32
函数来确定32位无符号整数的字节数

function numOfBytes( x ) {
    return x === 0 ? 1 : (((31 - Math.clz32( x )) / 8) + 1) | 0;
}

我想你可以检查一下
num,我想你可以检查一下
num