二进制整数的Java实现
如果将任意二进制数“无论在哪个位置”相加,则只有四种情况。 这些如下所示。
0=0
1 0=0 1=1
1 1=10=0向上舍入1
11从1 1 1=11=1向上位进位1
//整数的二进制加法
publicstaticstringadd(stringB1,String b2 ) {
int len1=b1.length (;
int len2=b2.length (;
String s1=b1;
String s2=b2;
string buffer sb1=new string buffer (;
//先把位数少的二进制的高位填为零
if(len1len2) {
for(intI=0; I(len1-len2; I ) {
SB1.append(0;
}
SB1.append(B2;
s1=b1;
s2=sb1.toString (;
}elseif(len1len2) {
for(intj=0; j(len2-len1); j ) {
SB1.append(0;
}
SB1.append(B1;
s1=sb1.toString (;
s2=b2;
}
//进位
输入标志=0;
string buffer sb2=new string buffer (;
for(intz=S1.Length ) )- 1; z=0; z----) {
//字符’0’对应的ASCII进制数为48
//根据情况判断
if () S1.charat(z )- 48 )==0) S2.charat )- 48 )==0)
sb2.append(flag );
flag=0;
连续;
}
if () S1.charat(z )- 48 )==0) S2.charat )- 48 )==1 flag==0)|(S1.charat(z )- 48 ) ()
SB2.append(1;
flag=0;
连续;
}
if () ) S1.charat(z )- 48 )==0) S2.charat )- 48 )==1 flag==1)|(S1.charat )- 48 ) ) )
SB2.append(0;
flag=1;
连续;
}
if(S1.charat(z )- 48 )==1) S2.charat )- 48 )==1 flag==0) {
SB2.append(0;
flag=1;
连续;
}
if(S1.charat(z )- 48 )==1) S2.charat )- 48 )==1 flag==1) {
SB2.append(1;
flag=1;
}
}
if(flag==1) {
sb2.append(flag );
}
//倒置
sb2.reverse (;
return sb2.toString (;
}
测试
publicstaticvoidmain (string [ ] args ) {
system.out.println(add('101 ',' 011 ' ) );
system.out.println(add('1001 ',' 1011 ' ) );
}