第1个回答 2013-08-10
//这里有一个32位的和64位的类似题目,更改一下部分功能应该能够实现你所要的内容
//在定义的时候把获得的1010等存入字符串再计算其他的内容
/*
* 请将下面的正数转换成为整数int和长整数long类型补码表示的二进制数
* 11,33,105,7,-9,-5,-111,-28,-65
*/
/**
*
* @author 一叶
*/
public class E二进制补码_实例_自作 {
public static void main(String args[]){
Buma 补码=new Buma();
补码.run(111,"long");
补码.run(-65,"int");
}
}
class Buma{
private int x;
private String leixing;
private int a[]=new int[64];//定义数组,这里定义长整形的占用位数,短整型的取一部分使用
//初始化
Buma(){
for(int j=0;j<64;j++)
{a[j]=0;}
}
//判断值正负
private boolean 正负(){
if(x>0) return true;
else return false;
}
//判断短整型还是长整形
private int 整形(){
if(leixing=="int") return 32;
else if(leixing=="long") return 64;
else return 0;
}
//求其2进制数
private void 二进制(){
int temp;
if(正负()) temp=x;
else temp=-x;
for(int i=整形()-1;i>0;i--)
{
if(temp<1)
break;
a[i]=temp%2;
temp=temp/2;
}
}
//二进制加法运算
private void 二进制加法(int x){
if(x==1)
for(int i=整形()-1;i>0;i--)
{
a[i]=a[i]+1;
if(a[i]==2)
a[i]=0;
else break;
}
}
//求其补码
private void 补码(){
if(!正负())//负数取反操作,正数则不处理
{
for(int i=0;i<整形();i++)
{
if(a[i]==0) a[i]=1;
else a[i]=0;
}
二进制加法(1);
}
}
private void 输出(){
for(int i=0;i<整形();i++)
{
System.out.print(a[i]);
}
System.out.print("\n");
}
void run(int x,String leixing){
this.x=x;
this.leixing=leixing;
二进制();
补码();
输出();
}
}复制搜索复制搜索本回答被网友采纳