Вот запустил это на С:
Код
//слева в выводе младший бит
#include <iostream>
using namespace std;
unsigned long data_in=0;
unsigned long counter=31; //5-bit counter; Initial value
unsigned long reg=1048575; //(2^20)-1 20-bit register; Initial value
unsigned long a;
unsigned long b;
unsigned long c;
unsigned long d;
unsigned long e;
//Функция которая возвращает значение бита в слове
unsigned long bit10(unsigned long data,unsigned long bit_number);
//Процедура которая возращает 1 если Счетчик==30
//или 0 если Счетчик!=30
unsigned long outc(void);
//процедура которая инкрементирует счетчик
void counter_inc(void);
int k=0;
int main() {
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
//Initial values
counter=31; //5-bit counter; Initial value
reg=0b11111111111111111111; //(2^20)-1 20-bit register; Initial value
a = bit10(reg,0) ^ bit10(reg,8);
a=bit10(a,0);
b = ~(bit10(reg,2) ^ bit10(reg,19));
b=bit10(b,0);
c = outc();
d=~(b^c);
d=bit10(d,0);
e=~(data_in ^ d);
e=bit10(e,0);
for(int i=0;i<64;i++){
//State 0
e=~(data_in ^ d);
e=bit10(e,0);
reg=reg<<1;
reg=reg|e;
counter_inc();
c = outc();
a = bit10(reg,0) ^ bit10(reg,8);
a=bit10(a,0);
b = ~(bit10(reg,2) ^ bit10(reg,19));
b=bit10(b,0);
d=~(b^c);
d=bit10(d,0);
//e=~(data_in ^ d);
//e=bit10(e,0);
cout<<e;
k++;
if(k==8){k=0;cout<<'\n';}
}
return 0;
}
//Функция которая возвращает значение бита в слове
unsigned long bit10(unsigned long data,unsigned long bit_number)
{
if((data & (1<<bit_number))>0) {return 1;}
else{return 0;}
};
//Процедура которая возвращает 1 если Счетчик==30
//или 0 если Счетчик!=30
unsigned long outc(void)
{
if(counter==30){return 1;}else{return 0;};
};
void counter_inc(void)
{
if(a==1){
counter=31;
}
else{
if(counter==31){
counter=0;
}
else
{
counter=counter+1;
}
};
};
Баг в том,что сначала выводится младший бит. То есть, слева младший бит.
В результате выдало следующее:
Код
Слева МЛДАШИЙ бит!
!!!Hello World!!!
11111111 =0xFF
11111111 =0xFF
11111111 =0xFF
11111110 =0x7F
11011011 =0xDB
01101101 =0xB6
10100110 =0x65
10011010 =0x59
Теперь надо понять почему слева младший бит, а не старший. Или так и должно быть. В стандарте там описано последовательность байтов, а не битов.
Жили бы в пещерах и не знали бы горя.