1

私は LED ディスプレイ (7x48) をコーディングしており、作業している言語は BASIC (その言語では以前の経験はありませんが、C/C++ で) で、小さな問題があります。私は配列(バイトの赤[20])を持っており、現在の状態の例は次のとおりです。ここで簡単にするために、その赤[3]としましょう

10011010 01011100 01011101

そして今、私は配列を1ずつシフトする必要があるので、次のサイクルでは

00110100 10111000 10111011

何が起こったのかというと、配列全体が1ビット左にシフトしたということです

私が使用している BASIC には .NET API がないため、低レベルのコード全体が必要です (BASIC である必要はありません。翻訳できます。自分のやり方でそれを行う方法のアイデアが必要なだけです。 8KB のコード メモリに制限されているため、完全に最適化する必要があります)

4

2 に答える 2

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 に答える