我怎样才能让函数接受4位二进制字符串并返回64位字符串
How can I get the function to take in a 4-bit binary string and return a 64-bit one?
我已经为LFSR编写了函数(甚至不确定它是否正确),但我试图让它以4位字符串作为输入并返回64位。
#include <iostream>
#include <bitset>
#include <ctime>
#include <cstdlib>
#include <random>
using namespace std;
void linshift(int s)
{
int y = 0;
int count = 0;
std::bitset<4> lfsr(s);
std::bitset<4> bit(y);
do
{
cout << "lfsr: " << lfsr << endl;
bit = ((lfsr >> 0) ^ (lfsr >> 2));
lfsr = (lfsr >> 1) | (bit << 3);
++count;
} while (count < 4);
cout << endl;
}
我的教授建议使用char,但输出只是符号而不是二进制。
编辑:也许这将有助于更好地解释我想问的问题。种子s是线性反馈移位寄存器的起始状态。这是一个随机的4位价值。通过让线性反馈移位寄存器产生64位输出来产生G(s)。
stringstream ss;
do
{
ss << lfsr ;
bit = ((lfsr >> 0) ^ (lfsr >> 2));
lfsr = (lfsr >> 1) | (bit << 3);
++count;
} while (count < 16);
return ss.str()
Visual Studio对语法有点挑剔。lfsr[0]^lfsr[2]是一个非极大lfsr,每6个循环重复一次。Lfsr [0]^ Lfsr[1]或Lfsr [0]^ Lfsr[3]是最大Lfsr,每15个周期重复一次。注意lfsr[0]对应于多项式项x^4, lfsr[1]对应于x^3, lfsr[2]对应于x^2, lfsr[3]对应于x, bit对应于不存在的lfsr[4]对应的1。
#include <iostream>
#include <bitset>
using namespace std;
void linshift(int s)
{
int count = 0;
bitset<4> lfsr(s);
bitset<1> bit;
do
{
// lfsr polynomial = x^4 + x + 1 = maximal lfsr, repeats every 15 cycles
// bit = lfsr[0] ^ lfsr[3];
// lfsr polynomial = x^4 + x^3 + 1 = maximal lfsr, repeats every 15 cycles
// bit = lfsr[0] ^ lfsr[1];
// lfsr polynomial = x^4 + x^2 + 1 = non-max lfsr, repeats ever 6 cycles
bit = lfsr[0] ^ lfsr[2];
lfsr = (lfsr >> 1) ^ bitset<4>(bit[0] << 3);
++count;
cout << bit;
} while (count < 64);
cout << endl;
}
int main()
{
for(int i = 1; i < 16; i++)
linshift(i);
return 0;
}
相关文章:
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 对字符数组中的元素执行逐位操作
- 如何在C ++中将二进制字符串128位转换为十进制字符串?
- 二进制数和位标志'x'
- 二进制字符数组转换为字符串流并从缓冲区弹出
- 如何将大型二进制文件(10000k 位)转换为基数 3 或基数 31?
- 短(ASCII,每个字符 7 位)字符串存储和C++中的比较优化
- 从 bin 文件 -c++ 中读取十六进制数字为每个字符 2 位数字
- 如何组合字符向量的二进制第 n 位
- 根据向量<bool>修改字符的位
- 将二进制字符的字符串表示转换为字符串的最佳方法
- 一次C++两个字符的字符到二进制转换,以获得 16 位二进制形式
- setw() 在包含 UTF-8 多字节字符/码位的字符串上输入错误的输出
- C++不是按位运算符二进制字符转换
- 如何从无符号字符(8位)缓冲区读取短整数(16位)
- 我有一个字符数组,我想把它的二进制位向右移动一个
- c++从stdin中读取二进制字符数组
- C++ 打印出矢量<无符号字符的位集>
- 将char数组中的数字字符转换为二进制字符
- 二进制-十进制负位集