c#十进制转二进制原理

十进制:0 1 2 3 4 5 6 7 8 9
二进制:0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
1 = 1 * 100
13 = 3 * 100 + 1 * 101
213 =3 * 100 + 1 * 101 + 2 * 102
3214 =4 * 100 + 1 * 101 + 2 * 102 + 3 * 103
43215 =5 * 100 + 1 * 101 + 2 * 102 + 3 * 103 + 4 * 104
543216 =6 * 100 + 1 * 101 + 2 * 102 + 3 * 103 + 4 * 104 + 5 * 105
6543217 =7 * 100 + 1 * 101 + 2 * 102 + 3 * 103 + 4 * 104 + 5 * 105 + 6 * 107

10进制数转换成二进制数,这是一个连续除以2的过程:
把要转换的,除以2,得到商和余数
将商继续除以2,直到商为0。最后将所有余数倒序排列,得到数就是转换结果

对于整数部分,用被除数反复除以2,除第一次外,每次除以2均取前一次商的整数部分作被除数并依次记下每次的余数。另外,所得到的商的最后一位余数是所求二进制数的最高位。

编程时的表达为
该数除以进制至该数为0,每次除进制所得的余数乘以10的对应次方,次方为除以进制的次数-1
最后将所有余数乘以10的对应次方的乘积相加,得该数于此进制时得表达数

转换的数除2的次数及商转换过程结果
11/2=01%2=1*101-1=10001
1313/2=6(1) 6/2=3(2) 3/2=1(3) 1/2=0(4)13%2=1(1) 6%2=0(2) 3%2=1(3) 1%2=1(4)1 * 101-1 + 0 * 102-1 + 1 * 103-1 + 1 * 104-1 = 1101

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace first
{
class Program
{

static void Main(string[] args)
{
Console.WriteLine(“请输入一个数”);
int a=int.Parse(Console.ReadLine()); //获取一个数
long target=0; //转换成的结果
int count = 0,radix=2; //除进制的次数,进制
int resider; //余数
for (int i = a; i > 0; i/=2) //i是每次计算后的商
{
resider = i % radix; //取余求的该位置的2进制数
count++; //代表2进制时的第几个数
int power = 1; //用来确定在计算上代表的位置
for (int j = 0; j < count-1; j++)
{ power ×= 10;}
target=target+(resider×power);
}
//前面是转换数,后面是以32位形式输出值
string number = target.ToString(); //转换成字符串
int s = number.Length; //获得当前数字的长度
for (int i = 1; i <= 32-s; i++) //在数字前补0,直到总数为32位
{
number = number.Insert(0, “0”);
}
for (int i = 1; i < 8; i++) //每隔四位插入一个空格
{ //使其变成:0000 0000 0000 0000 0001 0011 0110 0011 形式
number = number.Insert(4*i+i-1, " ");
}

Console.WriteLine(number);
Console.ReadLine();

}
}
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值