java语言实现8位二进制数的乘法。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java语言实现8位二进制数的乘法。相关的知识,希望对你有一定的参考价值。

例如输入01110011,10010101
输出的是01110000
即(73)•(95)=(70)

//不知道这是不是你要的结果
public static void main(String args[])


String a="";//定义从控制台输入的数A
String b="";//定义从控制台输入的数A
int cnum=0,dnum=0;//定义两个数转化为十进制的数
Scanner scanner =new Scanner(System.in);
System.out.println("请输入任意的一个八位的二进制数A");
a=scanner.nextLine();//接收A

if(a.length()!=8)//判断长度
System.out.println("A的输入长度不正确!");
else
boolean Atrue=true;//定义布尔量验证A是否是二进制数
for(int i=0;i<a.length();)//验证过程,并将其转化为10进制数
String substra=a.substring(i, ++i);
int c=1;
if(!substra.equals("0")&&!substra.equals("1"))//验证
Atrue=false;
break;

if(substra.equals("1"))//转化十进制
for(int j=0;j<a.length()-i;j++)
c=c*2;

cnum=cnum+c;



if(!Atrue)
System.out.println("A不是合法的二进制数!");
else
System.out.println("A输入正确");
System.out.println("A转化为10进制为"+cnum);
System.out.println("请输入任意的一个八位的二进制数B");
b=scanner.nextLine();

if(b.length()!=8)
System.out.println("B的输入长度不正确!");
else
boolean Btrue=true;
for(int i=0;i<b.length();)
String substrb=b.substring(i, ++i);
int d=1;
if(!substrb.equals("0")&&!substrb.equals("1"))
Btrue=false;
break;

if(substrb.equals("1"))
for(int j=0;j<b.length()-i;j++)
d=d*2;

dnum=dnum+d;



if(!Btrue)
System.out.println("B不是合法的二进制数!");
else//输入合法计算结果
System.out.println("B输入正确");
System.out.println("B转化为10进制为"+dnum);
System.out.println("A和B的乘积为"+dnum*cnum);
System.out.println("A和B的乘积转化为二进制"+Integer.toBinaryString(dnum*cnum));




参考技术A //计算结果跟楼主的不一样,不知道谁错了
//也可能是都错了,我这次写的是原码移位乘,莫非楼主的那个是补码的?
#include<stdio.h>
void shift(char result[],char b[])//右移


int i;
for(i=8;i>0;i--)

result[i]=result[i-1];

result[0]=0;
for(i=8;i>0;i--)

b[i]=b[i-1];

b[0] = result[8];

void solve(char a[],char b[])

char heigh[9];
char low[9];
int i,n=8;
for(i=0;i<9;i++)

heigh[i]=0;

for(i=0;i<8;i++)

low[i]=b[i];

while(n--)

char carrybit;//表进位
if(low[7])//如果此时各位为1

carrybit=0;
for(i=7;i>=0;i--)

char rj=heigh[i];
heigh[i]=heigh[i]^a[i]^carrybit;
carrybit=rj&a[i]|a[i]&carrybit|carrybit&rj;


shift(heigh,low);//右移
low[0]=heigh[8];

//舍掉高位,输出低位
for(i=0;i<8;i++)

printf("%d",low[i]);

printf("\n");

int main()
//char占一格字节,所以使用它
char a[9]=0;
char b[9]=0;
int i;
char c;
printf("Please inpute 2 binary number splited by ',' or blank\n");
for(i=0;i<8;i++)

c = getchar();
a[i]=c-'0';

c=getchar();
for(i=0;i<8;i++)

c = getchar();
b[i]=c-'0';

c=getchar();
solve(a,b);
return 0;

以上是关于java语言实现8位二进制数的乘法。的主要内容,如果未能解决你的问题,请参考以下文章

明德扬至简设计法设计的8位串行乘法器

怎么计算二进制数的运算

c语言16进制转换为10进制数的函数是啥?

有符号二进制数的乘法

单片机 怎么用位移的方法实现乘除法

为什么8位二进制数的范围是-128~127