首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JavaScript中像时钟一样递增8位值的数组?

如何在JavaScript中像时钟一样递增8位值的数组?
EN

Stack Overflow用户
提问于 2021-01-13 06:56:35
回答 2查看 49关注 0票数 0

假设我仅使用数组中的8位值来表示一个非常大的数字。假设数组长度为32个8位值。它从0开始。我只画4个8位的值来演示。

代码语言:javascript
复制
[0, 0, 0, 0]

然后它就会倒数。

代码语言:javascript
复制
[0, 0, 0, 1]
[0, 0, 0, 2]
...
[0, 0, 0, 255]

一旦它在第一列中达到255,它就会进入下一列。

代码语言:javascript
复制
[0, 0, 1, 0]
[0, 0, 1, 1]
[0, 0, 1, 2]
...
[0, 0, 1, 255]
[0, 0, 2, 0]
[0, 0, 2, 1]
...
[0, 0, 2, 255]
[0, 0, 3, 0]
[0, 0, 3, 1]
...

填满后,它转到第三列,然后在填写后,它转到第四列,依此类推。

代码语言:javascript
复制
[0, 1, 0, 0]
[0, 1, 0, 1]
[0, 1, 0, 2]
[0, 1, 0, 3]
...
[0, 1, 1, 0]
[0, 1, 1, 1]
[0, 1, 1, 2]
...
[0, 1, 2, 0]
[0, 1, 2, 1]
...
...
[1, 0, 0, 0]
[1, 0, 0, 1]
[1, 0, 0, 2]
...
[1, 0, 0, 255]
[1, 0, 1, 0]
[1, 0, 1, 1]
...
...
...
[2, 0, 0, 0]
[2, 0, 0, 1]
...
...
...
and so on.

如何编写算法来增加这些值,如下所示。就好像它是一个巨大的值,它只是使用较小的8位值来表示。这对我来说是一件令人费解的事情,而且我也没能做到。

实际上,我不确定我画的是反转的,我认为数字是从右边的最小位置到左边的较大位置,这就是为什么我这样画它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-13 07:19:35

你可以用一个简单的for循环来做这件事(参见下面的代码片段,应该是非常不言自明的)

代码语言:javascript
复制
let number = [0,0,255,250];

const add = () => {
  for ( let i = number.length - 1; i >= 0; i-- ) {
    if(number[i]===255){
      number[i] = 0;
    } else {
      number[i]++;
      break;
    }
  }
  console.log(number);
}
代码语言:javascript
复制
  <button onclick="add()">add</button>

票数 3
EN

Stack Overflow用户

发布于 2021-01-13 07:15:56

希望这就是你想说的。

代码语言:javascript
复制
function increase(ar){
    ar[0] = ar[0] + 1;
    for(let i = 0; i < ar.length-1; i++){
       ar[i+1]+= ar[i] < 256 ? 0 : 1;
       ar[i] = ar[i] < 256 ? ar[i] : 0;
    }
    return ar;
}
let res = [250,1,0,0];
for(let u = 0; u < 10; u++){
      console.log(increase(res));
}

到目前为止,它可以更一般化,更改限制,也可以按N递增(在本例中,它仅递增1)。

一种可能的实现如下:

代码语言:javascript
复制
function increase(ar, step = 1, limit = 256){
    ar[0] = ar[0] + step;
    for(let i = 0; i < ar.length-1; i++){
       ar[i+1]+= ar[i] < limit ? 0 : Math.floor(ar[i] / limit);
       ar[i] = ar[i] < limit ? ar[i] : ar[i] % limit;
    }
    return ar;
}
let res = [248,0,0,0];
for(let u = 0; u < 10; u++){
    console.log(increase(res, 3));
}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65693284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档