【发布时间】:2020-03-24 00:33:37
【问题描述】:
我要做的是仅使用按位运算符将用户输入的不超过 2^32 - 1 的任何数字转换为其二进制值。经过多次挠头和修补,我得出了这个结论,似乎给了我想要的东西......几乎:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("Enter a number: ");
String input = scan.nextLine();
int dec = Integer.parseInt(input);
ArrayList<Integer> binary = new ArrayList<Integer>();
for (int i = 0; i < 32; i++) {
if ((dec & 1) == 0) {
binary.add(0);
} else {
binary.add(1);
}
dec = dec >>> 1;
}
Object[] binaryArray = binary.toArray();
for (int i = binaryArray.length - 1; i >= 0; i--) {
System.out.print(binaryArray[i]);
}
}
这是我现在的问题:这确实输出了正确的二进制字符串,但我需要删除前导零,以便十进制数 10 以二进制形式显示为 1010,而不是 00000000000000000000000000001010。
我是第一学期的 CS 学生,因此我们将不胜感激任何有关解决问题的帮助或清理代码的提示。
【问题讨论】:
-
提示:当您打印二进制数字时,请尝试从整数中删除该数字。剩下的号码怎么办?
-
编辑:我看到你实际上是通过向右移动来删除数字。现在唯一的问题是,当你这样做的次数足够多时,变量
dec会发生什么。 -
进一步评论:将
dec这样的整数视为“十进制”是错误的。计算机中的所有数字(和字符串/字母)实际上都以二进制格式存储。您现在打印的实际上是数字在计算机中的真正格式。 -
二进制转换已经由
Integer.parseInt(input);完成。之后的一切都是浪费时间和空间。 -
假设您不处理负整数,范围是 2^31-1。另见
Integer.toBinaryString。
标签: java binary bitwise-operators leading-zero