1

我正在编写 LED 显示屏 (7x48),我使用的语言是 BASIC(以前没有使用该语言的经验,但使用 C/C++),我有一个小问题。我有一个数组(red[20] of byte),当前状态的一个例子是:为了让这里更容易,让我们说它的 red[3]

10011010 01011100 01011101

现在我需要将数组移动 1 所以在下一个周期它应该是

00110100 10111000 10111011

所以发生的事情是整个数组向左移动了 1 位

我正在使用的 BASIC 没有任何 .NET API,所以我需要总的低级代码(不一定是 BASIC,我可以翻译它,我只需要知道如何去做限于 8KB 代码内存,所以我必须完全优化它)

4

2 回答 2

1
If most significant bit is 1:
    subtract value of most significant bit
    multiply by 2 
    add 1
otherwise:
    multiply by 2
于 2013-05-09T21:07:46.870 回答
0

您应该能够使用位移操作:http: //msdn.microsoft.com/en-us/library/2d9yb87a.aspx

x成为您要移动的元素:

x = (x<<1) | (x>>23)

或者一般来说,如果你想左移y一位并且总共有n位:

x = (x<<y) | (x>>(n-y))

我不太了解基本知识,但这是我会用 C++/Java/C# 语言做的事情:

假设你有长度为 n 的 red[]:

int b = 32; //Number of bits per byte (your example showed 24, but usually there are 32)
int y = 1; //Number of bytes to shift to the left
int carry = 0;  //The bytes to carry over (I'm assuming that they move up the array from red[0] to red[1], etc.

for (int i=0;i<n;i++)
{
    int newCarry = (red[i]>>(n-y));
    red[i] = (red[i]<<y) | carry;
    carry = newCarry;
}

//Complete the loop
red[0]|=carry;
于 2013-05-09T21:05:05.207 回答