1. 題目
用16位二進制數表示一個十進制數字,最高位是符號位(1表示負數,并且負數用補碼表示),編程實作:輸入一個十進制數字,計算輸出以英文逗號(,)分割的該數字的16位二進制字串(不足16位時,前面補0)和4位十六進制字串(不足4位時,前面補0,如果包含字符,用大寫字母表示),當輸入數字超過最大值或最小值符時,輸出“NODATA”字符,輸入非數字字符時,輸出“INPUTERROR”字串,例如:輸入15,輸出00000000001111,000F;輸入-1,輸出1111111111111111,FFFF,輸入A,輸出輸入非法,
2. 解答
使用python自帶函式驗證參考11111Python 二進制,十進制,十六進制轉換
## 10-2 不管固定位數
def int2bin(n): # 輸入引數為整數
bin2 = ''
while n >0:
a = n%2
n = n//2
bin2 = str(a)+bin2
print(bin2)
return bin2
### 16位二進制 原碼
def int2bin_16(n): ## 輸入引數為整數
str1 = ''
list1 = ['0' for i in range(16)]
absn = abs(n)
for i in range(15,0,-1):
a = absn%2
absn = absn//2
list1[i] = str(a)
# print(list1)
if n < 0:
list1[0] = '1'
str1=''.join(list1)
return str1
### 原碼轉補碼
def yuan2bu(n): # 輸入為二進制原碼字串
if n[0] == '0':
return n
else:
str_bu = '1'
for j in range(15,0,-1):
if n[j]=='1':
reverseindex = j
break
for k in range(1,reverseindex):
if n[k]=='1':
str_bu += '0'
else:
str_bu += '1'
for m in range(reverseindex,16):
str_bu += n[m]
return str_bu
### 二進制轉十六進制
def bin2hex(n): #輸入為二進制補碼字串
str2 = ''
dict1 = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
list2 = []
for j in range(0,16,4):
sum1 = 0
for k in range(4):
sum1 = sum1 + int(n[j+k])*(2**(3-k))
list2.append(dict1[sum1])
str2=''.join(list2)
print(list2)
return str2
while(1):
num = input('Please input the num:')
# print(type(num))
flag_ifnum = True
for p in range(len(num)):
if p == 0:
if (num[p] <='9' and num[p]>= '0') or (num[p] == '-') or (num[p] == '+'):
continue
if num[p] <='9' and num[p] >= '0':
continue
else:
flag_ifnum = False
if not flag_ifnum:
print('INPUTERROR')
else:
if abs(int(num))>=2**15:
print('NODATA')
else:
bin_num_yuan = int2bin_16(int(num))
bin_num_bu = yuan2bu(bin_num_yuan)
# print(bin_num_bu)
bin_yanzheng = bin(int(num))
# print(bin_num_yuan)
# print(bin_yanzheng)
hex_num = bin2hex(bin_num_bu)
# print(hex_num)
hex_num_yanzheng = hex(int(num))
# print(hex_num_yanzheng)
print(bin_num_bu+','+hex_num)
print('check_bin',bin_yanzheng)
print('check_hex',hex_num_yanzheng)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/276193.html
標籤:python
上一篇:人臉識別IU(李知恩)
