C語言實驗二 位運算

2022-05-01 23:42:20 字數 1337 閱讀 4739

線性反饋移位暫存器

linear feedback shift register(lfsr),是指給定前一狀態,將該輸出的線性函式再用作輸入的移位暫存器。異或運算是最常見的單位元線性函式:對暫存器的某些位進行異或操作後作為輸入,再對暫存器中的各個位元進行整體移位。

賦給暫存器的初始值叫做「種子」,因為線性反饋移位暫存器的運算是確定的,所以,由暫存器所生成的資料流完全取決於暫存器當時或之前的狀態。而且,由於暫存器狀態是有限的,它最終肯定會是乙個重複的迴圈。然而,通過本原多項式,線性反饋移位暫存器可以生成迴圈週期非常長的序列。

fibonacci lfsrs

例如,16-位 fibonacci lfsrr

其含義是:第11、13、14、16位上的值異或作為第一位,剩下的位後移。

影響下乙個狀態的位元位的叫做抽頭,圖中抽頭序列為[16, 14, 13, 11]。

有結論:找到合適的抽頭,能使得lfsr長度達到最大,最大長度的序列能通過 $2^n-1$ 個內部狀態,不包括全零。

模擬一下就好了

#include #include 

#include

#include

void lfsr_calculate(uint16_t *reg)

intmain()

memset(numbers,

0, sizeof(int8_t) * 65536

); uint16_t reg = 0x1

; uint32_t count = 0

;

inti;

do

else

if (count == 24

)

for (i = 0; i < 32; i++) //生成乙個數要呼叫32次

lfsr_calculate(®);

} while (numbers[reg] != 1

); printf(

"got %u numbers before cycling!\n

", count);

if (count == 65535

)

else

free

(numbers);

return0;

}

這個程式,能隨機產生65535個1~65535中的數,然後再迴圈。

選取不同的初始值,只是迴圈的起點不同,迴圈還是同乙個。

1. 維基百科——線性反饋移位暫存器

2. 題目資源

c語言位運算 C語言學習筆記(二)位運算

這一節主要說的是位運算,計算機中的執行速度 位運算 加減 乘除 求餘 位運算就是將數字轉換成二進位制後進行運算,之後再將數字轉換成原來的進製 與運算 當兩個數相與時,只有都為l的時候結果才為1,其餘情況結果都為0,符號 include int main 這個程式可以判斷a是偶數還是奇數,輸出為1說明...

C語言二位陣列

前言 今天在實現裝配線排程程式時候,用到了二維陣列,並將其作為函式的引數。在寫程式的時候,遇到一些問題,即二維陣列做函式的引數應該如何正確表示。我寫程式的錯誤如下程式所示 1 include 2 void print int a 3 3 67intmain 8 10print a 11return0...

找球號二 位運算

時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述 在某一國度裡流行著一種遊戲。遊戲規則為 現有一堆球中,每個球上都有乙個整數編號i 0 i 100000000 編號可重複,還有乙個空箱子,現在有兩種動作 一種是 add 表示向空箱子裡放m 0 輸入 第一行有乙個整數n 0 輸出...