二进制求余数(模2算法),怎么用C语言实现?

二进制求余数(模2算法),怎么用C语言实现?,第1张

求得结果是返回得到的余数么? 是转换为二进制还是??

如果是转换为二进制则代码如下:

// test3.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <stdio.h>

#include <iostream>

#include <math.h>

using namespace std

void comput(int x,char *s)

int _tmain(int argc, _TCHAR* argv[])

{

int x,i

char s[32]

scanf("%d",&x)

comput(x,s)

for (i=strlen(s),i--i>=0i--)

{

cout<<s[i]

}

printf("\n")

system("pause")

return 0

}

void comput(int x,char *s)

{

int y

int i=0,j

while (true)

{

if (x%2==0)

{

s[i++]='0'

}

else

{

s[i++]='1'

}

j=x/2

x=j

if (j==0)

{

s[i]='\0'

return

}

}

}

截图如下:

C语言怎中取模运算符是“%”,作用是求两个数相除的余数。

例如,请看下面这段代码:

x=15/7

如果x是一个整数,x的值将为2。然而,如果用取模运算符代替除法运算符"/",得到的结果就不同了: 

 X=15%7

这个表达式的结果为15除以7的余数,等于1,这就是说,15除以7得2余1。

取模运算符通常用来判断一个数是否被另一个数整除。例如,如果要打印字母表中序号为3的倍数的字母,可以使用下面这段代码:

 int x

for(x=1 x<=26 x++)

if((x%3)==0)

printf("%c" x+64)

上例将输出字符串"cfilorux",即字母表中序号为3的倍数的所有字母。

CRC里的除法不是简单的二进制除法,不信用附件里的计算器算出的结果与它的结果不一样。

CRC的二进制除法是这样的:

1111000

除数

1101

除数

————

够除数的位数,商1

0010

余(除数与被除数前4位求异或得到的)

————

100

把被除数第5位挪下来

1101

除数

————

不够除,商0

1000

把被除数第6位挪下来

1101

除数

————

够除数的位数,商1

0101

余(仍然求异或)

————

1010

把被除数第7位挪下来

1101

除数

————

够除数的位数,商1

0111

余(仍然求异或)

————

被除数共7位,除完

所以得到商1011,余111


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7822143.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存