讨论 / 关于2进制的一点基础问题,急求,谢谢大家
3230391 2008-05-29 05:54:00
点我顶贴 收藏 删除
把一个数字转换成2进制

program ssss;

var

a:array[1..100] of 0..1;

len,i,n:longint;

begin

readln(n);

i:=1;

while n>0 do begin

a[i]:=n mod 2;

n:=n div 2;

inc(i);

end;

i:=100;

while (a[i]=0) and (i>1)do dec(i);

len:=i;

for i:=len downto 1 do write(a[i]);

readln;

end.

程序我知道是这样的

但是有没人能告诉我原理呢?

while n>0 do begin

a[i]:=n mod 2;

n:=n div 2;

inc(i);

end;

特别是这段~~

谢谢大家了呵

#1 阿修罗@2008-05-29 04:22:00
回复 删除
貌似是经典的什么除2取余法.....

高中数学书都有讲......

原理3言2语我说不清.....抱歉...在下太菜了..

#2 阿修罗@2008-05-29 04:23:00
回复 删除
这个方法同样可以推广到10进制转其他进制....
#3 wolf_love757@2008-05-29 04:25:00
回复 删除
二进制的转换应该学过吧(数学中的)

除二取余(这个不会就去百度上搜)

i记录二进制位数

a数组记录这个二进制的倒序

n记录整除2后的数

#4 heyuntian1022@2008-05-29 05:54:00
回复 删除
这是短除法;

不停除以2,取余,直到原数被除到0。将之前的余数按先后相反顺序排列。

Example:23转化为2进制

原数 余数

23 1(23 mod 2=1)

11(23 div 2) 1

5 1

2 0

1 1

0 over……

所以(23)10=(10111)2

自己消化消化

查看更多回复
提交回复