System.out.println(Integer.toBinaryString(2+24)); // 11010
这是使用的Integer.toBinaryString
方法。还有带有可变基数的toHexString
,toOctalString
和 a 。toString
如果您需要将字符串零填充到特定宽度,您可以编写如下简单的内容:
static String binaryPadded(int n, int width) {
String s = Integer.toBinaryString(n);
return "00000000000000000000000000000000"
.substring(0, width - s.length()) + s;
}
//...
System.out.println(binaryPadded(2+24, 8)); // 00011010
有多种方法可以将字符串零填充到固定宽度,但这适用于任何int
值。
对于十六进制或八进制,您可以改用格式化字符串:
System.out.println(String.format("%04X", 255)); // 00FF
规范不是很清楚,但看起来你想要这个映射:
0 -> 1
1 -> 2
2 -> 4
3 -> 8
4 -> 16
:
i -> 2
一世
在这种情况下,您的映射是从i
到(1 << i)
(这<<
是按位左移运算符)。
System.out.println(
(1 << 2) + (1 << 4)
); // 20
请注意,根据您要执行的操作,您也可以考虑使用 ajava.util.BitSet
代替。
BitSet
示范
这可能完全不合时宜,但假设您正在做某种区间算术,那么BitSet
可能是适合您的数据结构(另请参见 ideone.com):
import java.util.BitSet;
//...
static String interval(BitSet bs) {
int i = bs.nextSetBit(0);
int j = bs.nextClearBit(i);
return String.format("%02d:00-%02d:00", i, j);
}
public static void main(String[] args) {
BitSet workTime = new BitSet();
workTime.set(9, 17);
System.out.println(interval(workTime));
// 09:00-17:00
BitSet stackOverflowTime = new BitSet();
stackOverflowTime.set(10, 20);
System.out.println(interval(stackOverflowTime));
// 10:00-20:00
BitSet busyTime = new BitSet();
busyTime.or(workTime);
busyTime.or(stackOverflowTime);
System.out.println(interval(busyTime));
// 09:00-20:00
}
请注意,类似nextSetBit
和的方法nextClearBit
可以很容易地找到空的/占用的时隙。你也可以做intersect
, or
, and
, 等等。
这个简单的例子只找到第一个间隔,但你可以让它更复杂,并对不连续的时间间隔进行各种算术。