我一直在嘗試做一個線性反饋移位寄存器,但代碼中出現了一些我一直無法找到的錯誤,我嘗試通過以下方法來診斷問題:具有do-while循環處理該程序的基本操作,即異或中的位和移位他們的條件下,成爲兩個的任一個:C++中的do-while循環中的兩個條件
operSeq !=inpSeq
turnCount < 31.
該程序請求用戶輸入5個比特作爲LFSR的初始卡,那麼他/她必須輸入代表該多項式的第二個二進制序列:如果它是x^5+x^4+x^2+x^1+1;
,則用戶應該輸入的序列是10111
,如果它們中的任何一個是1,則檢查這些位,升ocation將被存儲在一個名爲xorArray
的向量中。作爲此代碼的測試用例,如果用戶輸入作爲初始卡,並輸入01111
作爲poly位置,則程序將生成無限數量的二進制序列,這些序列並不像正確地執行xor操作,以及它們也不會像循環指定的那樣在31輪之後終止!我需要幫助診斷此代碼。下面是它:
#include <iostream>
#include <bitset>
#include <vector>
using namespace std;
int main()
{
// int x, y;
int turnCount = 0;
bitset <5> inpSeq;
bitset <5> polyLoc;
bitset <5> operSeq;
bitset <5> bit;
vector <int> xorArray;
vector <int> keyReg;
cout << "Enter a 5-bit sequence: \n";
cin >> inpSeq;
cout << "Enter poly: \n";
cin >> polyLoc;
for (unsigned int i = 0; i < polyLoc.size(); i++)
{
if(polyLoc[i] == 1)
{
xorArray.push_back(i);
}
}
cout << "----" << "\n";
operSeq = inpSeq;
keyReg.push_back(inpSeq[0]);
int x = xorArray[0];
bit[4] = operSeq[x];
do
{
for (unsigned int j = 1; j < xorArray.size() ; j=j+1)
{
bit[4] = bit[4]^operSeq[j];
}
operSeq >>= 1;
operSeq[4] = bit[4];
cout << operSeq << "\n";
keyReg.push_back(operSeq[0]);
turnCount ++;
} while ((operSeq != inpSeq) || (turnCount < 31));
cout << "Generated key is: ";
for (unsigned int k = 0; k < keyReg.size(); k++)
{
cout << keyReg[k];
}
cout << "\n";
cout << "Bit 1 positions: ";
for (unsigned int g = 0; g < xorArray.size(); g++)
{
cout << xorArray[g];
}
cout << "\n";
cout << "Key length is: " << keyReg.size();
cout << "\n";
cin.get();
}
'我需要幫助診斷這個代碼'。你寫了代碼嗎?如果你這樣做了,爲什麼不使用編譯器套件附帶的調試器來診斷代碼呢?很少有人第一次編寫完美的程序,因此我們使用調試器來調試代碼,以查看代碼違反我們的計劃的情況。你做到了嗎?如果是這樣,當聲明它應該終止時,while()語句有什麼值? – PaulMcKenzie
我已經自己寫了,它編譯沒有錯誤!我在ubuntu上用g ++編譯它,編譯命令是我知道的關於g ++的唯一的東西。我不知道調試器,任何提示? –
調試器是「gdb」。如果你不知道如何使用它,你不會走得太遠。而且,這個語句「它編譯沒有錯誤!」 - 這意味着程序將如何運行。正確編譯程序只意味着程序使用正確的C++語法。看起來你並沒有準備好學習如何編寫程序的強制性步驟,那就是調試。 – PaulMcKenzie