数组中的循环字节移位

时间:2013-05-09 21:01:14

标签: matrix byte led basic

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

10011010 01011100 01011101

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

00110100 10111000 10111011

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

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

2 个答案:

答案 0 :(得分:1)

If most significant bit is 1:
    subtract value of most significant bit
    multiply by 2 
    add 1
otherwise:
    multiply by 2

答案 1 :(得分: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:

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;