将int从十进制表示的位转换为本机位,而无需使用String? (Java)

时间:2018-10-13 14:42:02

标签: java binary processing

我正在修改的代码中有整数和整数,它们使用代码中的十进制数字表示二进制文字,例如

int intDigitsAsBits = 1101;   // integer "representing" 13 to coder
int intDigitsAsBitsB = 1000;  // integer "representing" 8 to coder
  

背景:我正在使用Java方言进行Java 7之前的版本(处理),例如不提供0b0000样式的二进制文字。我正在这种情况下开发本机Java 8库-而不是处理代码。 Processing的界面主要用于早期代码语言学习者社区,因此在键入时可以理解的可视形式近似二进制。

例如,我希望能够将这些伪二进制整数值即时转换为它们的本机表示形式。

int intDigitsAsBits = 1101;
int intNative = someUnDecimalMethod(intDigitsAsBits);
System.out.println(intNative);  // "13"

我已经有一种方法,可以使用中间转换为String,然后使用radix = 2用Integer.parseInt()转换回来。

int intDigitsAsBits = 1101;
String iString = intDigitsAsBits + "";
int intBinaryValue = Integer.parseInt(iString, 2);
System.out.println(intBinaryValue);  // "13"

是否存在Java解决方案,可以将数字或位格式的int或Integer转换为本机表示形式-,使用String作为中间值?

我对效率特别感兴趣,但是欢迎所有解决方案。

2 个答案:

答案 0 :(得分:2)

int result = 0;
int i= 0;
while (bits != 0) {
    result |= (bits % 10) << i;
    i++;
    bits /= 10;
}

答案 1 :(得分:1)

好,要将数字位直接转换为本机int形式,可以执行以下操作:

int count =0;
int digitsAsBits = 1101;
int result =0;
while(digitsAsBits !=0){
    int lastdigit = digitsAsBits%10;
    result += lastdigit*Math.pow(2, count);
    count++;
    digitsAsBits = digitsAsBits/10;
}