精华内容
下载资源
问答
  • 展开全部我有点忙,所以没时间给你慢慢改。...import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Calculator implements ActionListener{private double data1=0.0,data2=0.0;private ...

    展开全部

    我有点忙,所以没时间给你慢慢改。不过我这儿有一个计算器的代码,你不介意的话用吧!

    import java.awt.*;

    import java.awt.event.*;

    import javax.swing.*;

    public class Calculator implements ActionListener{

    private double data1=0.0,data2=0.0;

    private String t_content;

    boolean number=false;

    //key用来标示用62616964757a686964616fe59b9ee7ad9431333264656665户所按下的按钮即加减乘除

    //key为0标示+,为1表示-,为2表示*,为3表示/

    short key=-1;

    //pkey的取值为-1~5

    //pkey为-1表示第一次按下=按钮,为5说明不是第一次按下=按钮

    //pkey为其他值0,1,2,3时分别代表+,-,*,/

    short pkey=-1;

    Frame frame=new Frame("Calculator");//定义标题为Calculator的窗体

    TextField textfield=new TextField(30);//定义计算机

    //定义backspace,ce,c0按钮

    Button backspace=new Button("Backspace");

    Button ce=new Button("CE");

    Button c0=new Button("C");

    //定义面板,其中backspace,ce,c0按钮和计算机兰textfeild放在面板p1中

    //其余按钮放在面板p2中

    Panel p1=new Panel();

    Panel p2=new Panel();

    //定义界面上的按钮数组,即除去backspace,ce,c0按钮的所有按钮

    String names[]=;

    Button bb[]=new Button[names.length];

    public static void main(String[] args){

    Calculator cal=new Calculator();

    cal.go();

    }

    public void go(){

    frame.setSize(300,200);

    frame.setLayout(new BorderLayout());

    Font fonts=new Font("楷体_GB2312",Font.PLAIN,12);

    //设置面板p1的字体和布局管理类型,将textfeild对象添加到面板中

    p1.setFont(fonts);

    p1.setLayout(new GridLayout(2,1,5,10));

    textfield.setFont(fonts);

    p1.add(textfield,null);

    //backspace,ce,c0按钮注册addActionListener方法

    backspace.addActionListener(this);

    ce.addActionListener(this);

    c0.addActionListener(this);

    //将backspace,ce,c0按钮添加到p1面板中

    p1.add(backspace,null);

    p1.add(ce,null);

    p1.add(c0,null);

    //设置面板p2的布局管理器类型为GridLayout

    p2.setLayout(new GridLayout(4,5,5,5));

    //为按钮组中的按钮注册addActionListener方法

    for(int i=0;i

    bb[i]=new Button(names[i]);

    p2.add(bb[i]);

    bb[i].addActionListener(this);

    }

    //设置面板p1和面板p2在窗体中的位置

    //面板p1在窗体的North方向,面板p2在窗体的South方向

    frame.add(p1,BorderLayout.NORTH);

    frame.add(p2,BorderLayout.SOUTH);

    frame.setVisible(true);

    //当单击关闭按钮时退出系统

    frame.addWindowListener(new WindowAdapter(){

    public void windowClosing(WindowEvent e){

    System.exit(0);

    }

    });

    }

    public void actionPerformed(ActionEvent ae){

    String s;

    //通过ActionEvent类的getActionCommand()方法,得出动作是由哪个按钮触发的。 s=ae.getActionCommand();

    //用户单击一次,计算栏里便去掉一个字符

    //先将计算栏里的字符清空,再添加除最好一个字符的字符串

    if(s.equals("Backspace")&&number){

    t_content=textfield.getText();

    textfield.setText("");

    for(int i=0;i

    char c=t_content.charAt(i);

    textfield.setText(textfield.getText()+c);

    }

    }

    //用户单击的是CE按钮,计算栏清空

    if(s.equals("CE")){

    textfield.setText("");

    number=false;

    }

    //用户单击的是C按钮

    if(s.equals("C")){

    textfield.setText("");

    data1=data2=0.0;

    number=false;

    }

    //用户单击的是sqrt按钮,其中负数不能被开方

    if(s.equals("sqrt")&&number){

    t_content=textfield.getText();

    if(t_content.charAt(0)=='-'){

    textfield.setText("负数不能被开方");

    number=false;

    }else{

    textfield.setText(Double.toString(java.lang.Math.sqrt(Double.parseDouble(t_content))));

    }

    }

    //用户单击的是1/x求倒数按钮,求倒数时分母不能为0

    if(s.equals("1/x") && number){

    t_content=textfield.getText();

    if(t_content.equals("0")){ textfield.setText("零不能求倒数");

    number=false;

    }else{

    textfield.setText(Double.toString(1/Double.parseDouble(t_content)));

    }

    }

    //用户单击的是%按钮

    if(s.equals("%")&&number){

    if(data2==0){

    t_content=textfield.getText();

    textfield.setText(t_content);

    }else{

    boolean g=false;

    for(int i=0;i

    if('.'==textfield.getText().charAt(i)){

    g=true;

    break;

    }

    //如果是Double 数,除100

    if(g=true){

    double dtemp=Double.parseDouble(textfield.getText());

    dtemp=dtemp/100.0;

    textfield.setText(Double.toString(dtemp));

    }

    //如果是int数但能被100整除,则去掉末尾两个0

    else{

    if(Integer.parseInt(textfield.getText())%100==0){

    int itemp=Integer.parseInt(textfield.getText());

    itemp/=100;

    textfield.setText(Integer.toString(itemp));

    }

    //如果是int数,但不能被100整除,则按Double数处理

    else{

    double dtemp=Double.parseDouble(textfield.getText());

    dtemp=dtemp/100.0;

    textfield.setText(Double.toString(dtemp));

    }

    }

    } }

    //对正负数字的处理

    if(s.equals("+/-")){

    t_content=textfield.getText();

    if(t_content.charAt(0)=='-'){

    textfield.setText("");

    String content;

    for(int i=1;i

    textfield.setText(textfield.getText()+t_content.charAt(i));

    }

    }else{

    textfield.setText("-"+t_content);

    }

    }

    //所按下的按钮为+按钮

    if(s.equals("+")){

    switch(pkey){

    case 0:

    data2+=Double.parseDouble(textfield.getText());

    break;

    case 1:

    data2+=Double.parseDouble(textfield.getText());

    break;

    case 2:

    data2+=Double.parseDouble(textfield.getText());

    break;

    case 3:

    if(textfield.getText().equals("0")){

    textfield.setText("除数不能为零");

    number=false;

    }else{

    key=-1;

    data2/=data1;

    textfield.setText(Double.toString(data2));

    break;

    }

    default:

    data2=Double.parseDouble(textfield.getText());

    }

    pkey=key=0;

    textfield.setText("");

    }

    //所按下的按钮为-按钮

    if(s.equals("-")){

    switch(pkey){

    case 0:

    data2+=Double.parseDouble(textfield.getText());

    break;

    case 1:

    data2+=Double.parseDouble(textfield.getText());

    break;

    case 2:

    data2+=Double.parseDouble(textfield.getText());

    break;

    case 3:

    if(textfield.getText().equals("0")){

    textfield.setText("除数不能为零");

    number=false;

    }else{

    key=-1;

    data2/=data1;

    textfield.setText(Double.toString(data2));

    break;

    }

    default:

    data2=Double.parseDouble(textfield.getText());

    }

    pkey=key=1;

    textfield.setText("");

    }

    //所按下的按钮为*按钮

    if(s.equals("*")){

    switch(pkey){

    case 0:

    data2+=Double.parseDouble(textfield.getText());

    break;

    case 1:

    data2+=Double.parseDouble(textfield.getText());

    break;

    case 2:

    data2+=Double.parseDouble(textfield.getText());

    break;

    case 3:

    if(textfield.getText().equals("0")){ textfield.setText("除数不能为零");

    number=false;

    }else{

    key=-1;

    data2/=data1;

    textfield.setText(Double.toString(data2));

    break;

    }

    default:

    data2=Double.parseDouble(textfield.getText());

    }

    pkey=key=2;

    textfield.setText("");

    }

    //所按下的按钮为/按钮

    if(s.equals("/")){

    switch(pkey){

    case 0:

    data2+=Double.parseDouble(textfield.getText());

    break;

    case 1:

    data2+=Double.parseDouble(textfield.getText());

    break;

    case 2:

    data2+=Double.parseDouble(textfield.getText());

    break;

    case 3:

    if(textfield.getText().equals("0")){

    textfield.setText("除数不能为零");

    number=false;

    }else{

    key=-1;

    data2/=data1;

    textfield.setText(Double.toString(data2));

    break;

    }

    default:

    data2=Double.parseDouble(textfield.getText());

    }

    pkey=key=3;

    textfield.setText("");

    }

    //所按下的按钮为=,求结果

    if(s.equals("=")&&number){

    //如果不是第一次按下=按钮

    if(pkey==5){

    switch(pkey){

    case 0:

    data2+=data1;

    textfield.setText(Double.toString(data2));

    break;

    case 1:

    data2-=data1;

    textfield.setText(Double.toString(data2));

    break;

    case 2:

    data2*=data1;

    textfield.setText(Double.toString(data2));

    break;

    case 3:

    if(textfield.getText().equals("0")){

    textfield.setText("除数不能为零");

    number=false;

    }else{

    data2/=data1;

    textfield.setText(Double.toString(data2));

    break;

    }

    }

    }

    //如果是第一次按下=按钮

    else{

    data1=Double.parseDouble(textfield.getText());

    switch(key){

    case 0:

    key=-1;

    data2+=Double.parseDouble(textfield.getText());

    textfield.setText(Double.toString(data2));

    break;

    case 1:

    key=-1;

    data2-=Double.parseDouble(textfield.getText());

    textfield.setText(Double.toString(data2)); break;

    case 2:

    key=-1;

    data2*=Double.parseDouble(textfield.getText());

    textfield.setText(Double.toString(data2));

    break;

    case 3:

    if(textfield.getText().equals("0")){

    textfield.setText("除数不能为零");

    number=false;

    }else{

    key=-1;

    data2/=Double.parseDouble(textfield.getText());

    textfield.setText(Double.toString(data2));

    break;

    }

    }

    }

    pkey=5;

    }

    //按下的按钮时数字按钮

    else{

    switch(s.charAt(0)){

    case'0':

    case'1':

    case'2':

    case'3':

    case'4':

    case'5':

    case'6':

    case'7':

    case'8':

    case'9':

    number=true;

    textfield.setText(textfield.getText()+s);

    break;

    //对.的处理

    case'.':

    t_content=textfield.getText();

    boolean g=false; //对计算机栏中的数据进行检验

    //如果其中有小数点,则用户单击该按钮时不在添加小数点

    for(int i=0;i

    if(t_content.charAt(i)=='.'){

    g=true;

    break;

    }

    }

    //数据中已经有小数点

    if(g==true)

    break;

    // 数据中没有小数点,当用户单击小数点时添加小数点

    if(g==false)

    textfield.setText(t_content+".");

    }

    }

    }

    private String Integer(String string) {

    // TODO Auto-generated method stub

    return null;

    }

    }

    2Q==

    已赞过

    已踩过<

    你对这个回答的评价是?

    评论

    收起

    展开全文
  • 二进制整数的Java实现任意两个二进制数(不论在什么位置)相加,只可能出现4种情况。它们是:0+0=01+0=0+1=11+1=10=0+向高一位的进位11+1+1=11=1+向高一位的进位1//整数二进制相加public static String add(String b1,...

    二进制整数的Java实现

    任意两个二进制数(不论在什么位置)相加,只可能出现4种情况。它们是:

    0+0=0

    1+0=0+1=1

    1+1=10=0+向高一位的进位1

    1+1+1=11=1+向高一位的进位1

    //整数二进制相加

    public static String add(String b1, String b2) {

    int len1 = b1.length();

    int len2 = b2.length();

    String s1 = b1;

    String s2 = b2;

    StringBuffer sb1 = new StringBuffer();

    //先将位数较少的二进制高位补零

    if(len1 > len2) {

    for(int i = 0; i < (len1 - len2); i++) {

    sb1.append(0);

    }

    sb1.append(b2);

    s1 = b1;

    s2 = sb1.toString();

    } else if(len1 < len2) {

    for(int j = 0; j < (len2 - len1); j++) {

    sb1.append(0);

    }

    sb1.append(b1);

    s1 = sb1.toString();

    s2 = b2;

    }

    //进位

    int flag = 0;

    StringBuffer sb2 = new StringBuffer();

    for(int z = s1.length() - 1; z >= 0; z--) {

    //字符’0’的对应的ASCII十进制是48

    //分情况判断

    if((s1.charAt(z) - 48) == 0 && (s2.charAt(z) - 48) == 0) {

    sb2.append(flag);

    flag = 0;

    continue;

    }

    if(((s1.charAt(z) - 48) == 0 && (s2.charAt(z) - 48) == 1 && flag == 0) || ((s1.charAt(z) - 48) == 1 && (s2.charAt(z) - 48) == 0 && flag == 0)) {

    sb2.append(1);

    flag = 0;

    continue;

    }

    if(((s1.charAt(z) - 48) == 0 && (s2.charAt(z) - 48) == 1 && flag == 1) || ((s1.charAt(z) - 48) == 1 && (s2.charAt(z) - 48) == 0 && flag == 1)) {

    sb2.append(0);

    flag = 1;

    continue;

    }

    if((s1.charAt(z) - 48) == 1 && (s2.charAt(z) - 48) == 1 && flag == 0) {

    sb2.append(0);

    flag = 1;

    continue;

    }

    if((s1.charAt(z) - 48) == 1 && (s2.charAt(z) - 48) == 1 && flag == 1) {

    sb2.append(1);

    flag = 1;

    }

    }

    if(flag == 1) {

    sb2.append(flag);

    }

    //倒置

    sb2.reverse();

    return sb2.toString();

    }

    测试

    public static void main(String[] args) {

    System.out.println(add("101", "011"));

    System.out.println(add("1001", "1011"));

    }

    0438982e9802f6647c2455832965cff3.png

    a192092e22b314cb5cf24015294ee31a.png

    展开全文
  • 先看打印结果在看代码比较好理解。结果在最下面的位置。总结:讲解了二进制的按位异域、按位与、左移的运算规则。并通过次3种算法得到2个数...//初始化要执行加法的值System.out.println("===开始二进制运算===");a...

    先看打印结果在看代码比较好理解。结果在最下面的位置。

    总结:讲解了二进制的按位异域、按位与、左移的运算规则。并通过次3种算法得到2个数相加的结果。二进制应该还有其他算法,由于知识浅薄就不知道了。

    代码:

    public static void main(String[] args){

    int a=11,b=9;//初始化要执行加法的值

    System.out.println("===开始二进制运算===");

    add(a,b);

    System.out.println("===二进制运算结束===");

    }

    /**

    * 将二进制的数据打印出来

    * @param binars 需要打印的二进制值

    * @param paramName 需要打印的参数名称

    * @return 返回打印的字符串

    */

    public static String printBnary(StringBuilder binars,int param){

    StringBuilder binarsRe=new StringBuilder();

    String[] strs=binars.toString().split(",");

    int strLength=strs.length;

    while (strLength>=1){

    binarsRe.append(strs[strLength-1]+" ");

    strLength--;

    }

    return binarsRe.toString();

    }

    /**

    * 十进制转换为二进制输出

    * @param a 要转换的十进制数

    * @param binars 接收转换后的二进制数据

    * @param paramName 需要打印的参数名称

    * @return

    */

    public static String DecimalTransBinary(int a,StringBuilder binars,int param){

    int rem=a%2;//取余数

    int base=a/2;//取基数

    /**

    * 物流是余数和基数都必须除尽为0

    */

    if(base>0 || rem>0){

    //将所有的余数都添加到字符串中使用,隔开在打印是使用

    binars.append(rem+",");

    DecimalTransBinary(base,binars,param);

    }

    //十进制转换二进制成功后,将二进制数据打印出来

    return printBnary(binars,param);

    }

    /**

    * 十进制加法,解释如何使用二进制实现的

    * @param a 执行加法的参数

    * @param b 执行加法的参数

    * @return 返回加法成功后的整数

    */

    public static int add(int a,int b){

    //对需要相加的数据输出为二进制

    StringBuilder binars=new StringBuilder();

    String aStr=DecimalTransBinary(a,binars,a);

    //将stringBuilder数据输出到控制台

    binars.setLength(0);

    String bStr=DecimalTransBinary(b,binars,b);

    int res=a;

    //按为异域的二进制运算

    int xor=a^b;

    System.out.println("");

    System.out.println("按位异域(^):二进制数据的相同位不同则为1,相同则为0。");

    System.out.println(a+"的二进制值:"+aStr);

    System.out.println(b+"的二进制值:"+bStr);

    System.out.println("参数:"+a+" 参数:"+b+" 进行"+a+"^"+b+":");

    binars.setLength(0);

    String xorStr=DecimalTransBinary(xor,binars,xor);

    System.out.println(aStr+"^"+bStr+"="+xorStr);

    System.out.println("按位异域后得到的二进制值:"+xorStr);

    System.out.println("按位异域后得到的十进制值:"+xor);

    //按位与的二进制运算和左移一位的值

    int forward=(a&b)<<1;

    System.out.println();

    System.out.println("按位与(&):二进制数据的相同位都为1则为1,若有一个不为1则为0。");

    System.out.println("左移(<

    System.out.println("10110转换为十进制就是:22。左移用十进制解释就是,11乘以2的1次方的结果。11<<2就是11乘以2的次方的结果。");

    System.out.println("参数:"+a+" 参数:"+b+" 进行("+a+"&"+b+")<<1:");

    binars.setLength(0);

    String forwardStr=DecimalTransBinary(forward,binars,forward);

    System.out.println("("+aStr+"&"+bStr+")<<1="+forwardStr);

    System.out.println("按位与后得到的二进制值:"+forwardStr);

    System.out.println("按位与后得到的十进制值:"+forward);

    System.out.println();

    if(forward!=0){

    System.out.print("("+a+"&"+b+")<<1="+forward+"运算结果不为0,");

    System.out.println("将"+a+"^"+b+"运算的结果值:"+xor+";("+a+"&"+b+")<<1运算的结果值:"+forward+"。继续重复以上运算。");

    res=add(xor,forward);

    }else{

    System.out.println("("+a+"&"+b+")<<1="+forward+"运算结果为0;"+a+"^"+b+"按位异域的运算结果就是最终的和:"+xor);

    res=xor;

    }

    return res;

    }

    结果:

    ===开始二进制运算===

    按位异域(^):二进制数据的相同位不同则为1,相同则为0。

    11的二进制值:1 0 1 1

    9的二进制值:1 0 0 1

    参数:11 参数:9进行11^9:

    1 0 1 1 ^1 0 0 1 =1 0

    按位异域后得到的二进制值:1 0

    按位异域后得到的十进制值:2

    按位与(&):二进制数据的相同位都为1则为1,若有一个不为1则为0。

    左移(<

    10110转换为十进制就是:22。左移用十进制解释就是,11乘以2的1次方的结果。11<<2就是11乘以2的次方的结果。

    参数:11 参数:9进行(11&9)<<1:

    (1 0 1 1 &1 0 0 1 )<<1=1 0 0 1 0

    按位与后得到的二进制值:1 0 0 1 0

    按位与后得到的十进制值:18

    (11&9)<<1=18运算结果不为0,将11^9运算的结果值:2;(11&9)<<1运算的结果值:18。继续重复以上运算。

    按位异域(^):二进制数据的相同位不同则为1,相同则为0。

    2的二进制值:1 0

    18的二进制值:1 0 0 1 0

    参数:2 参数:18进行2^18:

    1 0 ^1 0 0 1 0 =1 0 0 0 0

    按位异域后得到的二进制值:1 0 0 0 0

    按位异域后得到的十进制值:16

    按位与(&):二进制数据的相同位都为1则为1,若有一个不为1则为0。

    左移(<

    10110转换为十进制就是:22。左移用十进制解释就是,11乘以2的1次方的结果。11<<2就是11乘以2的次方的结果。

    参数:2 参数:18进行(2&18)<<1:

    (1 0 &1 0 0 1 0 )<<1=1 0 0

    按位与后得到的二进制值:1 0 0

    按位与后得到的十进制值:4

    (2&18)<<1=4运算结果不为0,将2^18运算的结果值:16;(2&18)<<1运算的结果值:4。继续重复以上运算。

    按位异域(^):二进制数据的相同位不同则为1,相同则为0。

    16的二进制值:1 0 0 0 0

    4的二进制值:1 0 0

    参数:16 参数:4进行16^4:

    1 0 0 0 0 ^1 0 0 =1 0 1 0 0

    按位异域后得到的二进制值:1 0 1 0 0

    按位异域后得到的十进制值:20

    按位与(&):二进制数据的相同位都为1则为1,若有一个不为1则为0。

    左移(<

    10110转换为十进制就是:22。左移用十进制解释就是,11乘以2的1次方的结果。11<<2就是11乘以2的次方的结果。

    参数:16 参数:4进行(16&4)<<1:

    (1 0 0 0 0 &1 0 0 )<<1=

    按位与后得到的二进制值:

    按位与后得到的十进制值:0

    (16&4)<<1=0运算结果为0;16^4按位异域的运算结果就是最终的和:20

    ===二进制运算结束===

    展开全文
  • 计算机能够识别的数制是二进制数,二进制数是用0和1两个数字来表示的数,计算机的指令集也是采用二进制表示,机器语言就是用二进制数编写程序。可以借助十进制数来理解二进制数。在十进制中,每一位有0、1、2、3、4...

    计算机能够识别的数制是二进制数,二进制数是用0和1两个数字来表示的数,计算机的指令集也是采用二进制表示,机器语言就是用二进制数编写程序。

    可以借助十进制数来理解二进制数。在十进制中,每一位有0、1、2、3、4、5、6、7、8、9十个数码,因此基数为10,超过9就必须用多位数来表示,并遵循逢十进一的原则。一个任意的十进制数可以表示为:

    01eb2a36975dd6dc295f82e460e4a91c.png

    其含义是:

    c023edff4ce671e1f2f973c363558e09.png

    其中ai(i=0,1…,n),bj(j=1,2,…,m)是0、1、2、3、4、5、6、7、8、9十个数码中的一个。

    上式中相应于每位数字的10n称为该数字的权,其大小是以基数为底,数码所在位置的序号为指数的整数次幂,每位数字乘以其权所得的乘积之和即为所表示数的值。

    例如:

    4ec23d105df083c99b401a1152f35046.png

    十进制是人们最熟悉、最常用的一种数制,但它不是唯一的数制。例如计时用的时、分、秒就是按60进制计数的。基数为r的r进制数可以表示为:

    979239f86718688e310700d0975c69c9.png

    ● 二进制和十六进制数

    计算机就其本身来说是一个电器设备,为了能够快速存储、处理、传递信息,其内部采用了大量的电子元件,在这些电子元件中,电路的通和断、电压高低,这两种状态最容易实现,也最稳定、也最容易实现对电路本身的控制。计算机工程师将计算机所能表示这样的状态,用0,1来表示、即用二进制数表示计算机内部的所有运算和操作。二进制数运算非常简单,计算机很容易实现,所以计算机内部都用二进制编码进行数据的传送和计算。

    二进制的基数为2,只有0、1两个数码,并遵循逢二进一的原则,它的各位权是以2k表示的,因此二进制数

    ce30bcabb9f807fa80d208b583722043.png

    的值为:

    3099c117893386e2e232e590ef847989.png

    其中ai,bj为0、1两个数码中的一个。例如:

    4aad51ea64eb1ee70d569f1968790feb.png

    其中数的下标表示该数的基数r,即二进制的101101与十进制的45等值。

    n位的二进制数可以表示2n个数。例如:3位二进制数可以表示8个数,分别是:

    2ade351ecdecb60730bbe4b271e715ed.png

    而4位二进制数则能表示十进制的0 ~ 15共16个数如下:

    27f1d8a396ee26ac77c7fea5c1649739.png

    为了方便阅读及书写,经常使用十六进制来表示二进制数,十六进制的基数是16,数码为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,其中用A,B,C,D,E,F(字母不区分大小写)这六个字母来分别表示10,11,12,13,14,15。

    按同样的方法,可以很容易地掌握十六进制数的表示方法。例如:

    210179ccdb84d2cfa85ed033629a7c5d.png

    在计算机编程语言中,通常用数字后面跟一个英文字母来表示该数的数制。十进制一般用D(Decimal)、二进制数用B(Binary)、十六进制用H(Hexadecimal)来表示。例如:23AH、570D、110101B、0075H,…。当然也可以用这些字母的小写形式。

    ● 不同进制数的相互转换

    计算机中采用的是二进制,但用计算机解决实际问题时对数值的输入输出通常使用十进制,这就有一个十进制向二进制转换或由二进制向十进制转换的过程。也就是说,在使用计算机进行数据处理时首先必须把输入的十进制数转换成计算机所能接受的二进制数;计算机在运行结束后,再把二进制数转换为人们所习惯的十进制数输出。

    1、二进制数转换成十进制数

    把二进制数转换成十进制数就是用“按权相加法”,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。

    例:把二进制数110.11转换成十进制数。

    961c84b00db71d7ab4d10020c77387c8.png

    2、十进制数转换为二进制数

    前面“按权相加法”中,权的值在小数点左边和小数点右边是不一样的。所以,十进制数转换为二进制数时,整数和小数的转换方法也不同,一般先把十进制数的整数部分和小数部分分别转换后,再加以合并。

    十进制整数转换为二进制整数采用"除2取余,逆排序"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把所有余数按逆序排列,也就是把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。这就是所谓“除2取余,逆序排列”。

    例:将一个十进制数25转换为二进制数。

    3657a041dd6e8c84a3780bac3d765395.png

    3、十六进制和二进制之间的转换

    由于十六进制的基数是2的幂,所以这两种数制之间的转换是十分容易的。一个二进制数,只要把它从低位到高位每4位组成一组,直接用十六进制数来表示就可了。

    例:0011 0101 1011 1111 = 35BF

    3 5 B F

    反之,把十六进制数中的每一位用4位二进制数表示,就形成相应的二进制数了。

    A 1 9 C

    例:A19C = 1010 0001 1001 1100

    4、十六进制数转换为十进制数

    同二进制数转换十进制数相同,各位十六进制数与其对应权值的乘积之和即为与此十六进制相对应的十进制数。

    例:N = BF3CH

    2602eb19299eaf0ca2c9c2a2f89ecc62.png

    =11*4096+15*256+3*16+12*1

    =48956D

    十进制数转换为十六进制数也可使用除法进行。

    0f4d9c6539a3e7d4e8ebb9fd05905e4a.png

    二进制数是逢二进位的进位制,0、1是基本算符,计算机运算基础采用二进制。编程过程中经常会用到十六进制,而十进制的使用非常少,这是因为十六进制和二进制有天然的联系:四个二进制位可以表示从0到15的数字,这刚好是1个16进制位可以表示的数据,也就是说,将二进制转换成十六进制只要每4位进行转换就可以了。

    edc03bb83330048fc518520dcc59cc42.png

    1、将下列二进制数转换为十六进制数和十进制数:

    (1)10101 (2)10000000 (3)11111111

    2、用除法将下列十进制数转换为二进制数和十六进制数:

    (1)369 (2)10000 (3)4095

    3、将下列十六进制数转换为二进制数和十进制数:

    (1)FA (2)5B (3)F234

    展开全文
  • 主要内容进制及其转换标识符、关键字常量...人类使用二进制:计算机使用八进制和十六进制:为了更好的表示二进制(缩短二进制长度)各进制数之间的关系1.2 计算机为什么使用二进制物理上容易实现,可靠性强;运算简单...
  • 二进制整数的Java实现任意两个二进制数(不论在什么位置)相加,只可能出现4种情况。它们是:0+0=01+0=0+1=11+1=10=0+向高一位的进位11+1+1=11=1+向高一位的进位1//整数二进制相加public static String add(String b1,...
  • 二进制整数的Java实现任意两个二进制数(不论在什么位置)相加,只可能出现4种情况。它们是:0+0=01+0=0+1=11+1=10=0+向高一位的进位11+1+1=11=1+向高一位的进位1//整数二进制相加public static String add(String b1,...
  • 这必须使用递归来完成,并且不能将数字转换为十进制,添加然后转换回二进制 . 所以我的基本情况说如果一个二进制数是空的,则返回另一个,反之亦然 . 然后对于我的递归调用,如果添加两个零,则返回0和递归调用 . ...
  • 二进制整数的Java实现任意两个二进制数(不论在什么位置)相加,只可能出现4种情况。它们是:0+0=01+0=0+1=11+1=10=0+向高一位的进位11+1+1=11=1+向高一位的进位1//整数二进制相加public static String add(String b1,...
  • 给定两个二进制字符串,以二进制字符串形式返回它们的和。例如:a = "11",b = "1",返回 "100"。public class Solution {public static String addBinary(String a, String b) {if (a == null || a.length() == 0) ...
  • (1) 给定两个只含有0和1字符的字符串,实现二进制加法。如: String str1 = “101” String str2 = “11” 实现binarySum(String s1,String s2),使得输入以上字符时返回字符串"1000"。 拿到这个需求之后 开始是一脸...
  • Java编写二进制加法

    千次阅读 2016-12-21 13:37:41
    最近在学VHDL和verilogHDL。 老师讲到了加法器,我就用Java写了两个程序,一个是普通的逐位加法器,另一个是超前.../*二进制逐位加法器,输入的加数位数一致 不足使用0补齐,进位输入只能为0或1 *@author Frank *@ver
  • Description 完成两个8位二进制数累加运算。如果最高位有进位,则加入最后一位。 Input 输入两个8位二进制数 Output 输出二进制数累加和。 Sample Input 10001011 01111100 Sample Output 00001000
  • 二进制加法用手算,然后用代码实现。 手算的时候,逢 2 进 1 。 用代码实现的时候,一开始会想到将长短不一的字符串对齐。 其实没必要。 找到字符串的长度,长度减 1 。 就是这个字符串的末尾, 然后从末尾...
  • sum-of-two-integers 题目描述 不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a 、b ​​​​​​​之和。 示例 1: 输入: a = 1, b = 2 输出: 3 示例 2: ...输入: a = -2, b = 3 ...
  • 题目要求求两个二进制数的加法算法思路:1、要定义几个参数,carry代表进位,opa代表数组a的元素转换成数字,opb代表数组b的元素转换成数字。sum代表数组的和2、判断两个字符串是否长度相同,如果不同的要从左补齐...
  • 二进制加法Java实现

    2019-04-27 09:36:00
    二进制整数的Java实现 任意两个二进制数(不论在什么位置)相加,只可能出现4种情况。它们是: 0+0=0 1+0=0+1=1 1+1=10=0+向高一位的进位1 1+1+1=11=1+向高一位的进位1 //整数二进制相加 public static String add...
  • //每一位进行加法需要加上进位 if (sum >= 2) { result.append((char)(sum - 2 + '0')); carry = 1; //当前位相加大于1需要进位 }else { result.append((char)(sum + '0')); carry = 0; } } if (carry =...
  • 思路:不用四则运算的话 就想到了用二进制。自己试着实现的时候,断档了。现在来看看学习到的思路:在我们列式计算的时候,各位依次相加,有进位的就进位,其实他是可以分开的,即a+b=(a和b各位相加的值)+(a和b...
  • java初学者--实现二进制加法

    千次阅读 2017-03-02 02:53:19
    我是用StringBuilder做的,网上还有更简单的方法(用... * 二进制加法,输入和输出都是字符串类型 * @param bin1 * @param bin2 * @return */ public static String sum(String bin1,String bin2){ StringB
  • 自学:String条件下的二进制加法 稍微记录一下 import java.lang.*; import java.util.*; class Solution { public String addBinary(String a, String b) { String result; int size_a = a.length(); ...
  • leetcode试题之二进制加法--java实现

    千次阅读 2016-11-19 19:55:12
    本题的需求是:给出两个字符串,内容是二进制数字,编写计算两个二进制数字和的程序。 难点是考虑周到,尤其是最后的一个进位,容易遗忘。 */ import java.util.ArrayList; class AddBinary{ public static void ...
  • 问题原始链接https://leetcode.com/problems/add-binary 给定两个二进制字符串,以二进制字符串形式返回它们的和。 例如:a = "11",b = "1",返回 "100"。 public class Solution { public stati...
  • java实现二进制加法

    2018-07-12 17:11:00
    总结:讲解了二进制的按位异域、按位与、左移的运算规则。并通过次3种算法得到2个数相加的结果。二进制应该还有其他算法,由于知识浅薄就不知道了。 代码: public static void main(String[] args){ int a...
  • 【067-Add Binary(二进制加法)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题 Given two binary strings, return their sum (also a binary string).  For example,  a = "11"  b = "1" ...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 315
精华内容 126
关键字:

java二进制加法

java 订阅