作业帮 > 综合 > 作业

c语言 程序设计 关于二进制

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/05/20 03:55:14
c语言 程序设计 关于二进制
例如
1)输入并显示 函数 Y(x)=x^5+x^3+x^2+1 G(x)=x^3+x^2+1 ;
2)然后根据G(x) 得到二进制数1101 (其中1101是这样得来的,x^3 一个1,x^2 一个1,X^1 没有,就一个0.最后数字1 还是数字1 所以得出1101)Y(x)得到101101
3)然后101101 和1101 得异或 其中1101为被除数.
上面1 2 3 怎么实现啊?可以提供下思路么?有具体最好
下面是我写的代码:
/*---------------------------------代码--------------------------------------*/
#include
#include
// 转化后的二进制最多的位数
#define MAX_BIN_LENGHT 100
// 输入的表达式最多的字符数
#define MAX_EXP_LENGHT 100
// 根据表达式得到二进制数
void getBinary(char *express,int binary[MAX_BIN_LENGHT]);
// 根据两个二进制数,异或得到结果
void getXOR(int binaryY[MAX_BIN_LENGHT],int binaryG[MAX_BIN_LENGHT],int binaryResult[MAX_BIN_LENGHT]);
// 打印二进制数
void printBinary(int binary[MAX_BIN_LENGHT]);
int main(int argc,char *argv[])
{
int binaryY[MAX_BIN_LENGHT]={0}; // 存放Y(x)转化后的二进制数
int binaryG[MAX_BIN_LENGHT]={0}; // 存放G(x)转化后的二进制数
int binaryResult[MAX_BIN_LENGHT]={0}; // 存放两个二进制数异或后的结果
char express[MAX_EXP_LENGHT]; //存放输入的表达式
printf("请输入Y(x)表达式:\n");
scanf("%s",express);
getBinary(express,binaryY);
printf("请输入G(x)表达式:\n");
scanf("%s",express);
getBinary(express,binaryG);
// 得到异或结果
getXOR(binaryY,binaryG,binaryResult);
printf("\nY(x)的二进制为:");
printBinary(binaryY);
printf("G(x)的二进制为:");
printBinary(binaryG);
printf("二者异或结果为:");
printBinary(binaryResult);
return 0;
}
//
void printBinary(int binary[MAX_BIN_LENGHT])
{
/*
*因为binary数组中binary[0]存放的是二进制的最低位,binary[MAX_BIN_LENGHT-1]存放的是二进制的最高位,
*所以输出二进制数时,必须要将数组倒序输出
*/
int i;
for(i=MAX_BIN_LENGHT-1;i>=0;i--)
{
if(binary[i]==1)
{
for(;i>=0;i--)
{
printf("%d",binary[i]);
}
}
else if(i==0)
{
printf("%d",binary[i]);
}
}
printf("\n");
}
/*----------------------------------测试结果-------------------------------------*/
请输入Y(x)表达式:
Y(x)=x^5+x^3+x^2+1
请输入G(x)表达式:
G(x)=x^3+x^2+1
Y(x)的二进制为:101101
G(x)的二进制为:1101
二者异或结果为:100000
/*-----------------------------------------------------------------------*/
下面是一些问题:
1.你的第三条中写道“3)然后101101 和1101 得异或 其中1101为被除数.”,这一条我没怎么看明白,这两个数异或哪里来的被除数啊?这一点我有点疑惑,在程序中我把你的第3条理解为求二者的异或值.
2.这个程序中是假设你输入的表达式是完全符合标准的,没有对一些错误的输入(比如输入Y(x)=x^dd+x^001+x^e2e+34+gg)这一类错误表达式的检测,这一点要注意.
3.开头的两个宏定义二进制最多的位数MAX_BIN_LENGHT、输入的表达式最多的字符数MAX_EXP_LENGHT,你可以根据自己的需要自行更改其具体的大小.
再问: 其实我想 做这样的运算 想解决异或运算。。。
再答: 根据你给的图,我猜想你指的可能是在求CRC循环冗余校验码运算,即模2除法吧?模2除做法与算术除法类似,但每一位除(减)的结果不影响其它位,即不向上一位借位。所以实际上就是异或。然后再移位移位做下一位的模2减。 第3条中写“然后101101 和1101 得异或 其中1101为被除数“,你应该是想要求他们模2除法的商和余数吧,求解过程中用到两模2除,即异或,而不是求101101 和1101这两个书的异或值。不知道我猜想的对不对,请楼主将第3条写清楚,你现在写的很容易让人误解,不知道你到底是要得到什么结果。 还有一点,Y(x)为101101,G(x)为1101,在第3条中楼主说"其中1101为被除数",是不是不对啊?如果1101是被除数,就变成1101除以101101了,小的除以大的,就不对了。应该是101101除以1101,101101即Y(x)才是被除数吧?
再问: 呵呵 厉害! 恩 ,我要做的就是 差错检测,用的是循环冗余检验CRC。 3)中,说错了 ,你说的对。101101是被除。 按我的思路,是这样子:先解决任意输入和显示函数>>>>再读取出二进制>>>>再解决算法(可是算法时要自动添加000,这里想不到怎么实现,那就先解决异或)那现在看来,当时我想要用异或来解决是错的。 有图片你也看到了 由Y(x)得101101 ,然后变成101101000,那最后求得发送的帧为101101001.(被除数+fcs)
再答: 我已经实现了这一功能,修改好的代码比较长,因为这百度知道的回答有字数限制,代码不能全贴出来,我把代码放在了我的JavaEye的空间博客里了,你可以到那里去查看修改完后的完整代码,如果还有什么问题,可以给我留言。下面是连接地址: http://lw2078.javaeye.com/blog/980479 希望对你有帮助。