鱼C论坛

 找回密码
 立即注册
查看: 3196|回复: 5

[已解决]15讲 进制转化问题

[复制链接]
发表于 2020-2-23 20:19:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
q = True
while q:
    num = input('请输入一个整数(输入Q结束程序):')
    if num != 'Q':
        num = int(num)
        print('十进制 -> 十六进制 : %d -> 0x%x' % (num, num))
        print('十进制 -> 八进制 : %d -> 0o%o' % (num, num))
        print('十进制 -> 二进制 : %d -> ' % num, bin(num))
    else:
        q = False

后面十进制转为十六进制、八进制、二进制,怎么一点看不懂
最佳答案
2020-2-23 21:09:49
本帖最后由 jackz007 于 2020-2-23 22:47 编辑

      很简单,假设要把一个数转换成 X 进制数,那么,只需要用这个数不停地除以 X,直到被除数等于 0 为止。然后,把这个过程中得到的所有的余数按倒序排列就可以了。
  1. def toX(N , X):
  2.     r , c = '' , ord('a')
  3.     if X < 37:
  4.         while N > 0:
  5.             d = N % X
  6.             r += str(d) if d < 10 else chr(c + d - 10)
  7.             N //= X
  8.     if not len(r):
  9.         r = '0'
  10.     return r[:: -1]

  11. D = 199
  12. print("使用   BIF   二进制:%s" % bin(D))
  13. print("使用   BIF   八进制:%o" % D)
  14. print("使用   BIF 十六进制:%x" % D)
  15. print('使用 toX()   二进制:%s' % toX(D , 2))
  16. print('使用 toX()   八进制:%s' % toX(D , 8))
  17. print('使用 toX() 十六进制:%s' % toX(D , 16))
复制代码

        运行实况
  1. C:\Bin>python x.py
  2. 使用   BIF   二进制:0b11000111
  3. 使用   BIF   八进制:307
  4. 使用   BIF 十六进制:c7
  5. 使用 toX()   二进制:11000111
  6. 使用 toX()   八进制:307
  7. 使用 toX() 十六进制:c7

  8. C:\Bin>
复制代码


        toX() 函数只能支持转换到 2 ~ 36 进制数,如果转换目标超过 36 进制,还需要进行适当的改造。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-23 21:05:55 | 显示全部楼层
这里用了字符串格式化,%d是十进制整数,%x是十六进制,%o是八进制,因为没有二进制的格式化符号,所以用了bin()函数来转换。
print('十进制 -> 十六进制 : %d -> 0x%x' % (num, num)),例如这句里就是把num以整数形式在%d的位置输出,以十六进制的形式在%x的地方输出
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-23 21:09:49 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-2-23 22:47 编辑

      很简单,假设要把一个数转换成 X 进制数,那么,只需要用这个数不停地除以 X,直到被除数等于 0 为止。然后,把这个过程中得到的所有的余数按倒序排列就可以了。
  1. def toX(N , X):
  2.     r , c = '' , ord('a')
  3.     if X < 37:
  4.         while N > 0:
  5.             d = N % X
  6.             r += str(d) if d < 10 else chr(c + d - 10)
  7.             N //= X
  8.     if not len(r):
  9.         r = '0'
  10.     return r[:: -1]

  11. D = 199
  12. print("使用   BIF   二进制:%s" % bin(D))
  13. print("使用   BIF   八进制:%o" % D)
  14. print("使用   BIF 十六进制:%x" % D)
  15. print('使用 toX()   二进制:%s' % toX(D , 2))
  16. print('使用 toX()   八进制:%s' % toX(D , 8))
  17. print('使用 toX() 十六进制:%s' % toX(D , 16))
复制代码

        运行实况
  1. C:\Bin>python x.py
  2. 使用   BIF   二进制:0b11000111
  3. 使用   BIF   八进制:307
  4. 使用   BIF 十六进制:c7
  5. 使用 toX()   二进制:11000111
  6. 使用 toX()   八进制:307
  7. 使用 toX() 十六进制:c7

  8. C:\Bin>
复制代码


        toX() 函数只能支持转换到 2 ~ 36 进制数,如果转换目标超过 36 进制,还需要进行适当的改造。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-23 21:20:23 | 显示全部楼层
格式符为真实值预留位置,并控制显示的格式。格式符可以包含有一个类型码,用以控制显示的类型,如下:

%s    字符串 (采用str()的显示)

%r    字符串 (采用repr()的显示)

%c    单个字符

%b    二进制整数

%d    十进制整数

%i    十进制整数

%o    八进制整数

%x    十六进制整数

%e    指数 (基底写为e)

%E    指数 (基底写为E)

%f    浮点数

%F    浮点数,与上相同

%g    指数(e)或浮点数 (根据显示长度)

%G    指数(E)或浮点数 (根据显示长度)

示例中的二进制也可以写成  print('十进制 -> 二进制 :  %d ->%s ' % (num, bin(num))), 因为bin(num)是一个字符串类型
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-23 21:40:47 | 显示全部楼层
一开始我也看不懂,小鱼是在转化后的数字前又加上了“0x""0o",其实这俩符号就是刻意加上去的,后面的才是转化后的8进制和16进制的值
bin转化二进制会自动带上0b,我估计是小鱼为了对仗工整才在前面都加上符号的(具体没有问过)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-23 21:42:33 | 显示全部楼层
字符串格式化在视频中讲解了  十进制转化为十六进制 用的是 '%x'  %10  显示a,
而print('十进制 -> 十六进制 : %d -> 0x%x' % (num, num))   这里有2个%,所以后面需要2个数来分别对应每一个%   
%d  表示输出十进制的数,也就是我们输入的数 ,   而  0X %x  其中 0X就是个符号   %x就是把我们输入的数字转化为十六进制的数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-2 07:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表