怎么转换二进制,八进制,十进制和十六进制啊?

具体的转换式和方法,谢谢!好的可以加分!最好能详细些的我是菜鸟... 具体的转换式和方法,谢谢!
好的可以加分!
最好能详细些的
我是菜鸟
展开
 我来答
sunyundonged
2009-04-21 · TA获得超过1477个赞
知道小有建树答主
回答量:318
采纳率:100%
帮助的人:365万
展开全部
分三种情况:
一,非十进制和十进制互转。
二,二进制转八进制(十六进制),八进制(十六进制)转二进制。
三,八进制和十六进制互转。

分三种情况是因为算法上不尽相同,有的是很简单的算术,有的则是比较繁琐的。

第一种情况的解决办法:
十进制转非十进制:先对进制数整除取余,在将获得的余数逆序排列。所得的数就是所要的。举例:165(十进制)转八进制:
165/8=20 余 5
20/8=2余4
2/8=0余2
所得的八进制数就是245.
非十进制转十进制:计算位权与数的积的总和。关于位权,很好理解,就是所在位上的数的价值。对于二进制数10110来说,位权分别为2^4,2^3,2^2,2^1,2^0(符号^代表幂,这你应该知道)。八进制数674的位权分别是8^2,8^1,8^0,对于这个八进制数转成十进制,结果就是6*8^2+7*8^1+4*8^0=444.

第二种情况的解决办法:二进制和八进制及十六进制关系很近,所以单列出一个快速的方法。

对于二进制转八进制:将二进制数从个位开始每三位分一段,将每一段计算成十进制,将这些十进制按原序排列所得的就是八进制数。比如1101110110,分段后为 1 101 110 110,最前一段可能不足三位,补零就行了。所得数为1 5 6 6,结果就是1566.
对于二进制转十六进制:和二进制转八进制类似,不过分段式四位而不是三位,另 计算结果应该有超过10的结果,在十六进制里用abcdef分别代表 10 11 12 13 14 15.比如11111011001,分段为 111 1101 1001,结果是7 13 9,十六进制数就是7d9.
对于八进制(十六进制)转二进制就是将上述方法逆回去。对于单个位的数转二进制你应该没问题吧,比如 4=100,9=1001.八进制(十六进制)转二进制就是将数位拆开,单个转二进制,所得的就是所要的了。例如16进制数8f7=8 15 7=1000 1111 0111,结果就是100011110111。八进制转二进制是三位的。

第三种情况的解决办法:这个最繁琐了,你先将八进制(十六进制)转成十进制,然后在转成十六进制(八进制)。没有好的方法。

好了 ,就这些,希望你懂了。
sunzhihuiustb
2009-04-21 · 超过11用户采纳过TA的回答
知道答主
回答量:19
采纳率:0%
帮助的人:27.2万
展开全部
十进制转换成二进制:
Dim d1 as Integer, x1 as Integer, l1 as Integer
Dim i as integer
Dim s1 as String, s2 as String
s1 = ""
d1=1234
Do
x1 = d1 Mod 2
s1 = s1 + ChrB$(x1 + 48)
d1 = d1 \ 2
If d1 = 0 Then Exit Do
Loop
l1 = Len(s1)
For i = 1 To l1
s2 = s2 + Mid$(s1, l1 - i + 1, 1)
Next i
十进制转换八进制与此类似,将其中的2改成8即可。
十进制转换成十六进制:
s1 = ""
d1 =1234
Do
x1 = d1 Mod 16
If x1 < 10 Then
s1 = s1 + ChrB$(x1 + 48)
Else
s1 = s1 + ChrB$(x1 + 55)
End If
d1 = d1 \ 16
If d1 = 0 Then Exit Do
Loop
l1 = Len(s1)
For i = 1 To l1
s2 = s2 + Mid$(s1, l1 - i + 1, 1)
Next i
二进制转换成十进制:
Dim h1 as String, s1 as String
Dim l1 as Integer, i as Integer, t as Integer, d1 as Integer
h1=“11010111”
L1 = Len(h1)
For i = 1 To L1
s1 = Mid$(h1, i, 1)
t = Asc(s1) - 48
d1 = d1 + t * 2 ^ (L1 - i)
Next i
八进制与此类似。
十六进制转换成十进制:
p1=“ABE3”
L1 = Len(p1)
For i = 1 To L1
s1 = Mid$(p1, i, 1)
If s1 >= "0" And s1 <= "9" Then
t = Asc(s1) - 48
ElseIf s1 >= "A" And s1 <= "F" Then
t = Asc(s1) - 55
ElseIf s1 >= "a" And s1 <= "f" Then
t = Asc(s1) - 87
End If
d1 = d1 + t * 16 ^ (L1 - i)
Next i
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一页凌风
2009-04-21 · TA获得超过1907个赞
知道小有建树答主
回答量:434
采纳率:25%
帮助的人:390万
展开全部
八进制转换为十进制,以下为例子,其他自己思考可以
main()
{ char *p,s[6];int n;
p=s;
gets(p);
n=0;
while(*(p)!='\0')
{n=n*8+*p-'0';
p++;}
printf("%d",n);
}

补充:汗!这个例子是进制转换,其他的可以自己推到。。。是在没时间写太多,不懂的话,晚上我回去了在百度上留言好了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式