【问题标题】:Outputting more numbers than 8-bit in Binary Numbers在二进制数中输出超过 8 位的数字
【发布时间】:2016-08-09 16:10:45
【问题描述】:

尝试学习 Java(空闲时间)并坚持为什么输出的变量比我想要的多。我希望它只打印出 8 位。我试过输入 &255,但没有做任何事情来摆脱尾随数字。

示例: 总和为:0000111110

Scanner sn = new Scanner(System.in); 
int arr[] = new int[10];
int i,m,n,sum,carry=0;

    System.out.print("Enter 8-bit signed binary number:");
            int n1 = sn.nextInt();

            System.out.print("Enter another binary number:");
            int n2 = sn.nextInt();

            for(i=arr.length-1;i>=0;i--){
                m=n1%10;
                n=n2%10;
                n1=n1/10;
                n2=n2/10;
                sum=m+n+carry;

                if(sum==1)
                {
                  arr[i]=1;
                  carry=0;
                }

            else    if(sum==2)
                {
                    arr[i]=0;
                    carry=1;
                }

            else    if(sum==3)
                {
                    arr[i]=1;
                    carry=1;
                }

                else{

                    arr[i]=m+n+carry&255;
                }

            }
            System.out.printf("The sum is:");
             for(i=0;i<arr.length;i++) {
                System.out.print(arr[i]);   
            }
             System.out.println("");
        }

【问题讨论】:

  • 用户应该输入什么作为输入,一个“伪二进制数”?就像只有 0 和 1 的数字一样?因为您使用nextInt() 读取输入。
  • 对不起!是的!它假设只是 0 或 1!
  • 究竟是什么问题?该程序似乎工作正常。你想去掉前导零,只输出 8 位数字吗?
  • 它的打印输出如下:输入 8 位有符号二进制数:00010000 输入另一个二进制数:00010000 总和为:0000100000 我希望总和为 8 位,而不是数字代表。

标签: java binary


【解决方案1】:

您得到前导零的原因是因为您强制程序计算 10 位并打印 10 位 (int arr[] = new int[10])。为了避免计算/打印额外的位,您可以更改 for 循环的条件,并跟踪总和有多少位:

    Scanner sn = new Scanner(System.in); 
    int arr[] = new int[10];
    int m,n,sum,carry = 0, nBits = 0; //Declare nBits, number of bits the final sum has

    System.out.print("Enter 8-bit signed binary number:");
    int n1 = sn.nextInt();

    System.out.print("Enter another binary number:");
    int n2 = sn.nextInt();

    for(int i = arr.length-1 ; (n1|n2|carry) != 0 ; i--, nBits++) {
        m=n1%10;
        n=n2%10;
        n1=n1/10;
        n2=n2/10;
        sum=m+n+carry;

        if(sum==1) {
            arr[i]=1;
            carry=0;
        }

        else if(sum==2) {
            arr[i]=0;
            carry=1;
        }

        else if(sum==3) {
            arr[i]=1;
            carry=1;
        }

        else {
            arr[i]=m+n+carry&255;
        }

    }
    System.out.printf("The sum is:");
    for(int i = arr.length-nBits ; i < arr.length ; i++) {
        System.out.print(arr[i]);   
    }
    System.out.println();
}  

条件更改为(n1|n2|carry) != 0,换句话说,当三个变量中的任何一个不等于0时,在每个循环中迭代nBits

【讨论】:

    猜你喜欢
    • 2016-10-31
    • 2018-09-15
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    相关资源
    最近更新 更多