我正在编写一个LED显示屏(7x48),而我正在使用的语言是BASIC(之前没有该语言的经验,但在C / C ++中),我有一个小问题。 我有一个数组(字节的红色[20])和一个当前状态的例子是: 为了使它更容易,让我们说它的红色[3]
10011010 01011100 01011101
现在我需要将数组移位1,所以在下一个周期中它应该是
00110100 10111000 10111011
所以发生的事情是整个数组向左移动了1位
我正在使用的BASIC没有任何.NET API所以我需要总的低级代码(不必是BASIC,我可以翻译它,我只需要知道如何做到这一点我只限于8KB的代码内存,所以我必须完全选择它)
答案 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;