如何用Python将十进制数字转为二进制,以及将二进制转为十六进制?

1.写一个程序convertToBinary(),要求是将一个十进制数字(可正可负)转换为64位的二进制补码形式。2.写一个程序convertToHex(),要求是将一个... 1. 写一个程序 convertToBinary(),要求是将一个十进制数字(可正可负)转换为64位的二进制补码形式。
2.写一个程序 convertToHex(),要求是将一个任意的补码形式的二进制转换为十六进制
最好内置函数方法和从定义一步步计算的方法都写出来
展开
 我来答
小白聊电子科技
高粉答主

2020-02-18 · 专注电子数码问题解答
小白聊电子科技
采纳数:775 获赞数:75464

向TA提问 私信TA
展开全部

1、将十进制转换成二进制,利用bin()方法。

2、获取二进制数据的长度。

3、to_bytes(),byteorder为little>>> (2048).to_bytes(2,byteorder='little');b'\x00\x08'。

4、使用to_bytes()方法,byteorder为big。

5、添加signed=True属性>>> (-10240).to_bytes(10,byteorder='little',signed=True);。

6、利用bit_length()方法>>> A3=45125656;>>> A3.to_bytes((A3.bit_length()+7) // 8,byteorder='big');。就完成了。

rogerjian
2017-11-28 · TA获得超过669个赞
知道小有建树答主
回答量:302
采纳率:81%
帮助的人:117万
展开全部
#首先说明一点,python有现成的函数可以干这个,只不过这个位数不会按照你想要的位数输出而已
#这些函数是 bin(), hex(), oct(),这些函数自己去看它的源码实现。
#个人写的如下

def addone(mods):
 assert isinstance(mods,list)
 tmods = mods.copy()
 if tmods:
  if tmods[0] == 0:
   tmods[0] = 1
   return(tmods)
  else:
   return([0] + addone(tmods[1:]))
 return([])

hexmap = {
 "0000": "0",
 "0001": "1",
 "0010": "2",
 "0011": "3",
 "0100": "4",
 "0101": "5",
 "0110": "6",
 "0111": "7",
 "1000": "8",
 "1001": "9",
 "1010": "A",
 "1011": "B",
 "1100": "C",
 "1101": "D",
 "1110": "E",
 "1111": "F",
}

def convertToBinary(num, site=64):
 assert -2**(site - 1) <= num < 2**(site - 1), "the %d is not in range [%d,%d)" % (num, -2**(site-1), 2**(site-1))
 mod = []
 quotient = abs(num)
 if quotient == 0:
  mod = [0]
 else:
  while quotient:
   mod.append(quotient % 2)
   quotient = quotient // 2
 mod += [0]*(site - len(mod) - 1)
 #if negative
 if num < 0:
  #not
  mod = [ 0 if i else 1 for i in mod ]
  #add 1
  mod = addone(mod)
  #add sign
  mod += [1]
 else:
  mod += [0]
 return("".join([str(i) for i in reversed(mod)]))

def convertToHex(code):
 clen = len(code)
 mod = clen % 4
 if mod != 0:
  if code[0] == 0:
   code = "0" * (4 - mod) + code
  else:
   code = "1" * (4 - mod) + code
 out = []
 for i in range(0,len(code),4):
  out.append(hexmap[code[i:i+4]])
 return("".join(out))


#convertToBinary(33,16) 
#'0000000000100001'
#convertToHex(convertToBinary(-33,64))
#'FFFFFFFFFFFFFFDF'
#convertToHex("1110001")
#'F1'
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
晏迎真0et
2017-11-28 · 超过25用户采纳过TA的回答
知道答主
回答量:57
采纳率:0%
帮助的人:8万
展开全部
Python自带的内置函数有这个功能,bin()。
M
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式