Java 十进制转二进制 - 大数转二进制

标签 java binary

我的程序应该将十进制数转换为二进制数。对于大数字,它给我一个负数而不是二进制数。这是为什么?

例如,如果我提供 2321,我会得到 100100010001,这很好。但如果我提供 241242141 我得到-2127232070093227171

我无法使用字符串、数组、函数。还有另一个选项不将其定义为字符串吗?输出?

import java.util.Scanner;

public class d {

  public static void main(String[] args) {   

    long num = 0;
    long temp = 0L;

    Scanner sc = new Scanner(System.in);
    num = sc.nextLong();

    long place = 1L;
    long output = 0;
    //System.out.print(""+ num%2+ (num%2)%2);
    while(num != 0) {
      temp = num % 2;
      num = num / 2;    

      output += (place*temp);
      place *=10;
    }

    System.out.print(""+output);    
  }
}

最佳答案

你的问题就在这里

  output += (place*temp);
  place *=10;

这会产生一个溢出的数字。

一个简单的替代方法是创建一个字符串,而不是生成一个无论如何都会转换为字符串的数字。

StringBuilder output = new StringBuilder();
while(num != 0) {
  output.append(num & 1);
  num >>>= 1;    
}

System.out.print(output.reverse());   

甚至

StringBuilder output = new StringBuilder();
for(long num = sc.netLong(); num != 0; num >>>= 1) 
  output.append(num & 1);

System.out.print(output.reverse());   
<小时/>

如果您不想使用除输入或输出之外的任何功能。

long num = 241242141;
int shift = 63;
while (num >>> shift == 0 && shift > 0) shift--;
for (; shift >= 0; shift--)
    System.out.print((num >>> shift) & 1);

// for comparison only
System.out.println("\n"+Long.toBinaryString(num));

打印

1110011000010001000000011101
1110011000010001000000011101

关于Java 十进制转二进制 - 大数转二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13249419/

相关文章:

java - 如何将源版本控制与 Web 服务器集成?

java - 如何使用 java sdk 将文件从我的语言环境上传和下载到 azure adls?

java - android sqlite 游标到映射适配器

networking - 找到校验和

C 128 位 double 型

sql - Oracle SQL - 将 select count(*) 转换为零或一

haskell - 在 Haskell 中将十进制转换为二进制

java - 在 JSP 中从 JavaScript/jQuery 调用后端 Java 方法

java - 为 Android 编程时是否需要指定列表的初始大小?

php - 真正的二进制编写PHP