我想做的是将用户输入的任何高达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,而不是0000000000000000000000 1010。
我是第一学期的计算机科学专业的学生,所以任何关于解决问题的帮助或清理代码的提示都将不胜感激。
根据我对你问题的理解,这是我能想到的。
如果你只是想用你自己的方法删除前导零,这里是解决方法,但是我不建议你这么做,因为它太大,不可读。
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<>();
for (int i = 0; i < 32; i++) {
if ((dec & 1) == 0) {
binary.add(0);
} else {
binary.add(1);
}
dec = dec >>> 1;
}
StringBuilder ss = new StringBuilder();
for (int i = binary.size() - 1; i >= 0; i--) {
ss.append(binary.get(i));
}
System.out.println(Integer.parseInt(ss.toString()));
}
或者你可以使用这种方法较少的代码:)易于阅读
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);
char[] arr = Integer.toBinaryString(dec).toCharArray();
StringBuilder sb = new StringBuilder();
for (Character c : arr) {
sb.append(c);
}
System.out.println(sb);
}
第三次阅读你的代码时,我注意到有些事情有点棘手。你正在做的是好的,但可能有更好的方法。我不打算给出答案,但我想看一些不同的东西。
不需要代码中的ArrayList
。如果你这样写代码呢?
for (int i = 1 << 31; i != 0; i = i >>> 1) {
if ((dec & i) == 0) {
System.out.print( "0" ); //binary.add(0);
} else {
System.out.print( "1" ); //binary.add(1);
}
}
在这里,我只是简单地“边走边打印”不需要ArrayList
和到数组的转换。我已经有一个循环在工作,我不需要添加第二个循环来打印数组的所有值,因为我只使用我已有的循环。
好的,所以我的第一个代码是错误的。它以相反的顺序打印。这个代码(应该!未经测试!)从32位开始,从那里开始倒计时,按顺序打印位。它还展示了如何在循环中使用其他东西,如i=i
详细说明提示:一种快速“查看”代码正在做什么的方法是在代码运行时打印重要值。例如,要了解如何使用
dec
,请添加一条print语句来打印其值。有些人说使用调试器和单步执行代码,但我发现打印语句更快。
for( int i = 0; i < 32 ; i++ ) {
if( (dec & 1) == 0 ) {
binary.add( 0 );
} else {
binary.add( 1 );
}
dec = dec >>> 1;
System.out.println( "DEBUG: " + dec );
}
我正在尝试使用Python中的bin()函数将整数转换为二进制。但是,它总是删除前导零,这是我实际需要的,因此结果总是8位: 例子: 有办法做到这一点吗?
我想知道如何将舞蹈方法的十进制结果包含到灯光方法中。例如,在这个程序中,如果我输入5F,十进制结果将是95。我希望95在light方法中显示为静态int变量,以便转换为二进制数。如果你能告诉我如何将十六进制数限制在2位数以内,那也会很有帮助。感谢阅读! } }
我编写了简单的java代码将十进制转换为8位二进制:很抱歉这个愚蠢的问题 //int j=8-结果。长度();//对于(int i=0;i 结果是:dec长度为:1****反转前8位:10000 8位表示:00001 但当我删除第13行时(结果=0;)编译器打印7星号(*),原因是什么?每次都会更新结果的长度
我正在尝试从二叉查找树中删除节点。我可以成功地删除树上的任何其他节点,除了一个特殊的情况。如果目标节点有两个子节点,左边的子节点有右边的子树,我可以定位正确的替换节点,并将值切换到目标节点,但替换节点永远不会被删除。 看看上面的图片,如果我尝试删除17,程序将正确地导航到13,并用13替换17,但它不会像预期的那样删除原来的13。 我附加了我的remove方法和其中引用的方法。 这是我的Node类
本文向大家介绍十进制到二进制转换,包括了十进制到二进制转换的使用技巧和注意事项,需要的朋友参考一下 十进制数字也可以转换为二进制格式。要将十进制数转换为二进制数,我们需要将数字除以2,直到达到0或1。然后,在每一步骤中,其余部分将分开存储以形成相反的二进制等效数。 在此算法中,我们将遵循递归方法。这将帮助我们在不使用堆栈数据结构的情况下解决问题。在实现中,我们知道函数的递归将遵循内部堆栈。我们将使
我试着删除二叉查找树的节点,当我打印出来的时候,我得到的结果实际上不是这个删除,实际上可以删除二叉树本身的任何键。 我是二进制搜索树的新手。有人能帮我写代码吗?我们将感谢您的帮助。 谢谢 完整代码