进制转换
十进制转二进制(1)
#十进制转二进制
#十进制转二进制
def decimal_to_hinary(decimal_number):
s='' #转换结果
while decimal_number>0: #在商比0大的时候
r=decimal_number%2 #余数
s=str(r)+s #倒取余数
decimal_number=decimal_number//2 #短除法除2
return s
#十进制转二进制(1)测试函数
print('十进制转二进制测试函数')
print('十进制:',13)
print('二进制:',decimal_to_hinary(13))
十进制转二进制(2)
#将十进制数decimal_number不大于255转成8位二进制
#不补8位前面补0,自定义函数返回列表
def decimal_to_binary_8(dec):
a=[0]*8 #创建要输出的列表
for i in range(len(a)):
a[7-i]=dec % 2 #将十进制对2取余数,倒序放入列表
dec=dec//2 #整除2
return a
#十进制转二进制(2)测试函数
print('十进制转二进制测试函数')
decimal_number = 13
binary_number = decimal_to_binary_8(decimal_number)
print("十进制数:"+str(decimal_number))
print(" 转换为结果为:",binary_number)
十进制转十六进制
#将十进制数n转成十六进制,列如:十进制数26,返回结果为1A
def decimal_to_hex(n):
s="" #输出结果
k="0123456789ABCDEF" #方便进行数字与十六进制字母转换
while n!=0:
r=n % 16 #计算余数
s=k[r]+s #短除法倒取余数
n=n//16 #短除法下一位
return s
# 十进制转十六进制测试函数
print('\n十进制转十六进制测试函数')
dec_num=46
hex_num=decimal_to_hex(dec_num)
print("十进制数:",dec_num)
print("十六进制数:",hex_num)
二进制转十进制
#将二进制数s转成十进制,
def binary_to_decimal(s):
n=len(s)
ans=0 #要返回得值
for i in range(n):
x=int(s[i]) #数值转为整型
ans+=2**(n-1-i)*x #公式:位权*数值
return ans
# 二进制转十进制测试函数
print('\n二进制转十进制测试函数')
bin_num='1101'
dec_num=binary_to_decimal(bin_num)
print("二进制数:",bin_num)
print("十进制数:",dec_num)
十六进制转十进制
#将十六进制数s转成十进制,列如:十六进制数2A,返回结果为42
def hex_to_decimal(s):
n=len(s)
ans=0
for i in range(n):
if "A"<=s[i]<="Z": #如果是十六进制中的字母
x=ord(s[i])-55 #将字母转换为数字
else:
x=int(s[i])
ans+=16**(n-1-i)*x #数值*位权相加
return ans
#将十六进制数s转成十进制测试函数
print('\n将十六进制数s转成十进制测试函数')
hex_num='2A'
dec_num=hex_to_decimal(hex_num)
print("十六进制数:",hex_num)
print("十进制数:",dec_num)
二进制转十六进制(直接)
#二进制字符串分割成4位一组,每4位二进制转成对应一位十六进制,然后拼接结果
def binary_to_hex(s):
while len(s) % 4 != 0:
# 补充二进制字符串长度至4的倍数,以便后面的处理
s = '0' + s
hex_string = ""
for i in range(0, len(s), 4):
# 将二进制字符串分割成4位一组,并将每组转换为对应的十六进制数
ans = 0 # 计算每组四位二进制数的十进制值
for j in range(4):
ans += 2**(4-1-j)*int(s[i+j])
if ans < 10: # 将十进制值转换为十六进制字符
hex_digit = str(ans)
else:
hex_digit = chr(55+ans)
hex_string += hex_digit
return hex_string
# 二进制直接转十六进制测试代码
print('\n二进制直接转十六进制测试代码')
s = "101010"
hex_value = binary_to_hex(s)
print("二进制:", s)
print("十六进制:", hex_value)
十六进制转二进制(直接)
#将每位十六进制转成4位二进制字符串,不足4位,前面补0,然后拼接结果
def hex_to_binary(s):
n=len(s)
ans=''
for i in range(n):
if 'A'<=s[i]<='Z': #十六进制字母转换为十进制数字
x=ord(s[i])-55
else:
x=int(s[i])
ans_4='' #对应每一位十六进制转换为二进制的结果
while x>0: #将一位十六进制转换为四位二进制
r=x%2
ans_4=str(r)+ans_4
x=x//2
while len(ans_4)<4: #不足四位补足四位
ans_4='0'+ans_4
ans+=ans_4 #加入字符串中
return ans
# 将每位十六进制转成4位二进制字符串测试代码
print('\n将每位十六进制转成4位二进制字符串测试代码')
s = "3B"
hex_value = hex_to_binary(s)
print("十六进制:", s)
print("二进制:", hex_value)