Matrix 数组中的循环字节移位

Matrix 数组中的循环字节移位,matrix,byte,led,basic,Matrix,Byte,Led,Basic,我正在编写一个LED显示屏(7x48)的代码,我使用的语言是基本语言(以前没有使用该语言的经验,但使用C/C++),我有一个小问题。 我有一个数组(红色[20]字节),当前状态的一个示例是: 为了方便起见,让我们说它是红色的[3] 10011010 01011100 01011101 现在我需要将数组移位1,这样在下一个循环中 00110100 10111000 10111011 所以整个数组向左移动了1位 我正在使用的BASIC没有任何.NET API,因此我需要全部的低级代码(不必是BASI

我正在编写一个LED显示屏(7x48)的代码,我使用的语言是基本语言(以前没有使用该语言的经验,但使用C/C++),我有一个小问题。 我有一个数组(红色[20]字节),当前状态的一个示例是: 为了方便起见,让我们说它是红色的[3]

10011010 01011100 01011101

现在我需要将数组移位1,这样在下一个循环中

00110100 10111000 10111011

所以整个数组向左移动了1位


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

您应该能够使用位移位操作:

x
成为要移动的元素:

x = (x<<1) | (x>>23)
我对basic不太了解,但下面是我在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;
intb=32//每个字节的位数(您的示例显示为24位,但通常为32位)
int y=1//要向左移动的字节数
整数进位=0//要携带的字节(我假设它们在数组中从红色[0]向上移动到红色[1]),等等。
对于(int i=0;i>(n-y));

红色[i]=(红色[i]您应该能够使用位移位操作:

x
成为要移动的元素:

x = (x<<1) | (x>>23)
我对basic不太了解,但下面是我在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;
int b=32;//每个字节的位数(您的示例显示为24位,但通常为32位)
int y=1;//要向左移动的字节数
int carry=0;//要携带的字节(我假设它们在数组中从红色[0]向上移动到红色[1],以此类推)。
对于(int i=0;i>(n-y));

红色[i]=(红色[i]是的,我知道这些,但基本支持某种进位吗?例如,我需要将值从红色[2]传输到红色[1]的最后一位。我仍然不确定如何将值从元素传递到元素?例如,如果红色[1]是0xFF和红色[2]是0x00,在我误解了ohhh之后。我会更新我的解决方案。你允许制作阵列的新副本吗?是的,但我正在编程一个16位PIC,所以我的内存有限,虽然我的旧解决方案有3个阵列和很多代码,如果你能找到最好的方法,那就太棒了。更新了我的答案,在适当的位置使用阵列。是的,我是awar例如,我需要将值从红色[2]传输到红色[1]的最后一位。我仍然不确定如何将值从一个元素传递到另一个元素?例如,如果红色[1]是0xFF,而红色[2]是0x00,在我误解了ohhh之后。我会更新我的解决方案。你允许制作阵列的新副本吗?是的,但我正在编程一个16位PIC,所以我的内存有限,虽然我的旧解决方案有3个阵列和很多代码,如果你能找到最好的方法,那将是非常棒的。更新了我的答案,在适当的位置使用阵列。