我只是想了解这段代码。
static int convert2binary(int Decimal)
{
int remainder, final = 0;
string result = "";
bool NaN;
while (Decimal > 0)
{
remainder = Decimal % 2;
Decimal /= 2;
result = remainder + result;
NaN = int.TryParse(result, out final);
}
return final;
}
这是一个二进制转换器,它是如何工作的?我只是没有得到模数,十进制/ = 2,然后将它们加在一起,如何给二进制文件?
答案 0 :(得分:3)
我们只是输入一些数据,好吗?
convert2binary(10)
-> remainder, final = 0
-> result = ""
-> NaN (= false)
loop:
Decimal > 0, so: remainder = Decimal % 2 (= 0) and Decimal /= 2 ( = 5)
result = remainder + result = 0 + ""
NaN = false
repeat:
Decimal > 0, so: remainder = Decimal % 2 (= 1) and Decimal /= 2 ( = 2)
result = remainder + result = "10"
NaN = false
repeat:
Decimal > 0, so: remainder = Decimal % 2 (= 0) and Decimal /= 2 ( = 1)
result = remainder + result = "010"
NaN = false
repeat:
Decimal > 0, so: remainder = Decimal % 2 (= 1) and Decimal /= 2 ( = 0)
result = remainder + result = "1010"
NaN = false
repeat: WHOOPS: Decimal == 0, so we return the final (int representation) of result.
现在,为什么这样做?
基本上,在每次迭代时,您将从数字右侧分割出最后一位二进制数字(这是%2
位)。由于您将其余部分除以2(/=2
位),您可以循环执行此操作。
每次迭代都会给出数字多项式中的连续位置:
decimal(10) == 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 0 * 2^0 = binary(1010)
你也可以向另一个方向走:如果你想用int.ToString()
方法来打印出数字的十进制变量,你可以用% 10
分割出最后一位数字(其余的)将数字除以10),这是打印最多的数字。将其余部分除以10,这样你就可以重复数十个位置,数百个位置等......
试试吧!
int number = 123;
// this is equivalent to: (1 * 10^2) + (2 * 10^1) + (3 * 10^0)
int remainder = number % 10; // remainder = 3
number /= 10 // number = 12 (integer division!!)
result = remainder + ""; // result = "3"
// number is now: (1 * 10^1) + (2 * 10^0), because we divided by 10!
remainder = number % 10; // remainder = 2
number /= 10 // number = 1
result = remainder + result; // result = "23"
// number is now: (1 * 10^0)
remainder = number % 10; // remainder = 1
number /= 10 // number = 0 - we're going to STOP now!
result = remainder + result; // result = "123"
// yay! hurray!!
所以,你看,你的数字系统(无论是二进制还是八进制或十进制或十六进制或其他)只是写下基数幂的多项式的简写。最右边的数字总是基数为^ 0,并且对于你向左移动的每个数字,指数都会增加1。
如果你弄清楚小数点的作用,可以获得奖励积分;)
答案 1 :(得分:0)
请参阅此页面上的第二种方法:http://www.wikihow.com/Convert-from-Decimal-to-Binary
这是您的算法尝试做的事情。
答案 2 :(得分:0)
在十进制和二进制之间进行转换时,请记住每个二进制数字的小数为2的幂。
100110 = 1 * 2 ^ 5 + 0 * 2 ^ 4 + 0 * 2 ^ 3 + 1 * 2 ^ 2 + 1 * 2 ^ 1 + 0 * 2 ^ 0 = 38
所以要从整数构建二进制字符串,从右边开始:
最后将该字符串转换为数字。