我试图弄清楚这个程序是如何工作的,我陷入了While循环,我不明白第二个循环如何退出,因为v
永远不会等于0或负数。既然它是退出该循环的唯一条件,还是我错过了更深层次的东西?该代码将整数(> 0)转换为二进制。
public class Binary {
public static void main(String[] args) {
// read in the command-line argument
int n = Integer.parseInt(args[0]);
// set v to the largest power of two that is <= n
int v = 1;
while (v <= n/2) {
v = v * 2;
}
// check for presence of powers of 2 in n, from largest to smallest
while (v > 0) {
// v is not present in n
if (n < v) {
System.out.print(0);
}
// v is present in n, so remove v from n
else {
System.out.print(1);
n = n - v;
}
// next smallest power of 2
v = v / 2;
}
System.out.println();
}
}
答案 0 :(得分:6)
v是一个int,在Java 1/2中作为int给出0.你的循环遍历所有2的幂,所以将达到1,然后是0。
在调试器中运行它以查看!
答案 1 :(得分:0)
想一想
N = 10
所以
V = 8
系统将打印
1010
,迭代次数为:
1 - 10> 8 else语句,因此打印1和:n = 2,v = 4
2 - 2&lt; 4 if语句,因此打印0和:v = 2
3 - 2 = 2 else语句,因此打印1和:n = 0,v = 1
4 - 0&lt; 1 if语句,因此打印0和:n = 0,v = 1/2,0为整数
在下一次迭代期间,条件不再满足,代码结束。
答案 2 :(得分:0)
我觉得你在理解 Integer Division 时遇到了问题。在整数除法中,3/2
不等于1.5
,而是1
。因此,类似1/2
不等于0.5
,而是0
。由于变量v
是整数,因此除以整数2
始终是整数除法。因此,您的变量v
最终会达到0
。