内容正文:
Python基础复习(三)
——进制转换问题
一、进制转换
十进制转换为其他进制(k进制):除k取余倒排法
其他进制(k进制,逢k进一)转换为十进制,按照位权展开法
111B=_______________ (23)8=_____________ 31H=___________
【经典例题】
1.下列数值中,与十六进制数30最接近的是( )
A.29D B.31D C.110010B D.2FH
2.下列各数中,比二进制数00010101小的数是( )
A.00011010B B.11H C.35D D.A0H
3.有一个二进制数为1□101□0,其中有两位数字模糊不清,下列可能与其值相等的是( )
A.84D B.64H C.53H D.52D
4.有二进制和十六进制数相加的表达式:1101B+2CH,下列与其结果相等的是( )
A.111001B B.111000B C.111010B D.111011
5.将二进制数11B、十进制数15D和十六进制数10H按从大到小排序,下列正确的是( )
A.10H,15D,11B B.10H,11B,15D C.15D,10H,11B D.15D,11B,10H
6.一个4位十六进制数n,其末位数字为“0”。下列说法正确的是( )
A.若将n转换为二进制数m1,m1的有效位数可能是12位
B.若将n转换为二进制数m2,m2的有效位数不可能是17位
C.若将n转换为十进制数m3,无法确定m3是否能被16整除
D.若将n的末位数字“0”去掉后,再转换为十进制数,所得的值为n/10
7.已知某进制数的等式满足:23+5=30和30+52=102,则下列说法正确的是( )
A.这两个等式为四进制数加法运算
B.这两个等式为十六进制数加法运算
C.等式23+5=30的计算结果30,转换为十进制数为24
D.等式30+52=102的计算结果102,转换为十进制数为258
8.用8位二进制表示有符号整数时,左边第一位为“0”表示为正,“1”表示为负。下列数值中与十进制数(-87)10相等的是( )
A.1010111B B.01010111B C.11010111B D.11010110B
9.一个二位十六进制正整数n,末位是“9”,下列说法正确的是( )
A.无法确定n是奇数还是偶数 B.n+1是一个三位十六进制数
C.转换为十进制数,最小值是25 D.转换为二进制数,位数一定是8
10.现有一个二进制数X为1□10□,其中“口”表示未知,以下关于这个数的说法正确的是( )
A.X不可能是5的倍数 B.X可能是21
C.X<28肯定成立 D.X〉20肯定成立
11.求一个十进制(-255~-1)负数的8位二进制补码方法是:将其对应的正数7位二进制所有位数取反(1改为0,0改为1)后加1,并设置符号位(最高位)为1。如求-3的8位二进制补码方法:3的7位二进制数为0000011,取反后为1111100,加1后为1111101,设置符号位为1,-3的8位二进制补码为11111101。则十进制数-5的8位二进制补码为( )
A.11111011 B.10000101 C.11111010 D.11111100
二、进制转换代码实现
1、十进制转二进制、十六进制
1.将十进制n转二进制数存储在字符变量s中。例如:n=10,转换成二进制数后s=“1010”
s=""
n=int(input())
while _____________:
r=_____________ # 取余
s=_____________ # 拼接
n=_____________ # 取整
print(s)
2.将十进制n转16进制数存储在字符变量s中。例如:n=42,转换成16进制数后s=“2A”
k="0123456789ABCDEF"
s=""
n=int(input())
while _____________:
r=_____________
s=_____________
n=_____________
print(s)
2、 二进制转十进制
3.二进制数存储在字符串变量s中。使用“位权展开”法将二进制转换为十进制。结果存储在整数变量ans中。
法1:
s="10011"
ans = 0
n=_____________
for i in range(n):
x=_____________
ans=_____________
print(ans)
4.二进制数存储在字符串变量s中。使用“累乘相加”法将二进制转换为十进制。结果存储在整数变量ans中。
法2:
s="10011"
ans=0
n=len(s)
for i in range(n):
x=int(s[i])
ans=ans*2+x
print(ans)
3、 十六进制转十进制
5.十六进制数存储在字符串变量s中。使用“位权展开”法将十六进制转换为十进制。结果存储在整数变量ans中。
法1:
s="2A"
ans=0
n=len(s)
for i in range(n):
ch=s[i]
if ch>="A" and ch<="Z":
x=_____________
else:
x=_____________
ans=_____________
print(ans)
5.十六进制数存储在字符串变量s中。使用“累乘相加”法将十六进制转换为十进制。结果存储在整数变量ans中。
法2:
s="2A"
ans=0
n=len(s)
print(ans)
三、习题巩固
1、编写程序,实现如下功能:输入一个整数n,输入一个整数k,运行后,将十进制数n转换为k进制数并输出。比如n=25,k=2,转换为二进制后为“10011”,请补充代码。
n=int(input("请输入一个十进制整数n:"))法2:
m = "0123456789ABCDEF"
n = int(input("请输入一个十进制整数n:"))
k = int(input("请输入要转换的进制k:"))
s = ""
n1 = n
print(k, "进制数的", n, "为", s)
k=int(input("请输入要转换的进制k:"))
s=""
n1=n
while n1>0:
print(k,"进制数的",n,"为",s)
2、编写程序,实现如下功能:输入一个整数s,输入一个整数k,运行后,将k进制数s转换为十进制数并输出。比如s=”10011”,k=2,转换为十进制后为“25”,请补充代码。
法1:法2:
k = int(input("请输入一个进制:"))
s = input("请输入一个该进制数:")
n = len(s)
s1 = ""
ans = 0
print(ans)
k = int(input("请输入一个进制:"))
s = input("请输入一个该进制数:")
n = len(s)
s1 = ""
ans = 0
print(ans)
3、奇偶校验是一种校验数据传输正确性的方法。其中奇校验方法:统计二进制数据的数位中“1”的个数,若个数为奇数,则校验值为0,否则校验值为1。小李编写了一个计算机奇校验位值的Python程序,功能如下:输入1~255十进制待校验数,回车后出现该数对应的二进制值以及校验位值。
(1)实现该功能的Python程序如下,请在划线处填入合适代码。
n = int(input("请输入待校验数:"))
t = 0
s =""
while ________________:
a = n % 2
n = ___________________
t = ___________________
s = ___________________
v = t % 2
print("二进制值:",s)
print("校验位值:",________________)
(2)运行该程序,输入待校验数22,则显示的校验位值是________________。
学科网(北京)股份有限公司
$
Python基础复习(三)
——进制转换问题
一、进制转换
十进制转换为其他进制(k进制):除k取余倒排法
其他进制(k进制,逢k进一)转换为十进制,按照位权展开法
111B=_____7D_____ (23)8=______19D_____ 31H=_____49D______
【经典例题】
1.下列数值中,与十六进制数30最接近的是( D )
A.29D B.31D C.110010B D.2FH
本题主要考查进制数的转换。二进制数和十六进制数可以通过“按权展开、逐项相加”的方法转换为十进制数,故30H=48D,110010B=50D,2FH=47D,故与十六进制数30最接近的是2FH,故本题选D选项。
2.下列各数中,比二进制数00010101小的数是( B )
A.00011010B B.11H C.35D D.AOH
本题考查的是进制数转换B:00010001 C:100011 D.10100000
3.有一个二进制数为1□101□0,其中有两位数字模糊不清,下列可能与其值相等的是( A )
A.84D B.64H C.53H D.52D
本题考查的是进制数转换。通常采用一个字母后缀来表示该数的进位制,在该数的最后以字母B、D、H分别表示二进制、十进制、十六进制。将十进制整数转换为二进制数可用“除2取余法”,将十六进制数转换为二进制数时,每一位十六进制数转换成四位二进 制数。84D=1010100,故选项A符合;64H=1100100,故选项B不符合;53H=1010011,故选项C不符合;52D=110100,故选项D不符合
4.有二进制和十六进制数相加的表达式:1101B+2CH,下列与其结果相等的是( C )
A.111001B B.111000B C.111010B D.111011
本题考查的是进制转换。两种方法,可以转为二进制算,也可以转为十进制算。1101B+2CH=1101B+101100B=111001B,故选项AD错误。
111001B转为十进制是57。故选项C正确。
5.将二进制数11B、十进制数15D和十六进制数10H按从大到小排序,下列正确的是( B )
A.10H,15D,11B B.10H,11B,15D C.15D,10H,11B D.15D,11B,10H
本题考查进制之间的转换。本题采用将二进制、十六进制数转换为十进制数之后再比较的方法,二进制数11B转换为十进制数为3,十六进制数
10H转换为十进制数为16,则三数的排列顺序为:10H15D11B,选项B正确。
6.一个4位十六进制数n,其末位数字为“0”。下列说法正确的是( B )
A.若将n转换为二进制数m1,m1的有效位数可能是12位
B.若将n转换为二进制数m2,m2的有效位数不可能是17位
C.若将n转换为十进制数m3,无法确定m3是否能被16整除
D.若将n的末位数字“0”去掉后,再转换为十进制数,所得的值为n/10
本题主要考査十六进制数。该十六进制数转十进制数,每一位数值可能在0~9之间;该十六进制数末位的"0”去掉后,分别转换为十进制表示,则所得的值是n/16;一位十六进制数由4位二进制数表示,若该十六进制数有4位(即需要二进制4*4=16位),存储该十六进制数最少需16/8=2B;一位十六进制数由4位二进制数表示,将该十六进制数转换为二进制数,则对应的二进制数末4位均为"0”,故本题选D选项。
7.已知某进制数的等式满足:23+5=30和30+52=102,则下列说法正确的是( C )
A.这两个等式为四进制数加法运算
B.这两个等式为十六进制数加法运算
C.等式23+5=30的计算结果30,转换为十进制数为24
D.等式30+52=102的计算结果102,转换为十进制数为258
本题考查的是进制数。由等式可知“逢八进一”故这两个等式是八进制数加法运算,故选项AB错误:八进制数30转换十进制数:3*8+0*1=24,故选项C正确;八进制数102转换十进制数:1*8^2+8+0*8+,2*1=66,故选项D错误。
8.用8位二进制表示有符号整数时,左边第一位为“0”表示为正,“1”表示为负。下列数值中与十进制数(-87)10相等的是( C )
A.1010111B B.01010111B C.11010111B D.11010110B
9.一个二位十六进制正整数n,末位是“9”,下列说法正确的是( )
A.无法确定n是奇数还是偶数 B.n+1是一个三位十六进制数
C.转换为十进制数,最小值是25 D.转换为二进制数,位数一定是8
本题考查的知识点是进制转换知识。由于十六进制数n的末位是9,因此该数肯定是奇数,故选项A错误。由于十六进制数在F后才会产生进位,当未位是9时,n+1的结果不会产生进位,故选项B错误。选项C正确,
最小的符合题意的两位十六进制数是19H,其十进制值为25D。转换为二进制数后位数不一定是8,例如29H,其对应的二进制数是101001B只有6位,因此D选项错误。故正确答案为C选项。
10.现有一个二进制数X为1□10□,其中“口”表示未知,以下关于这个数的说法正确的是( B )
A.X不可能是5的倍数 B.X可能是21
C.X<28肯定成立 D.X〉20肯定成立
本题考查的知识点是进制转换知识X可能是10100 20、11100 28、10101 21、11101 29
11.求一个十进制(-255~-1)负数的8位二进制补码方法是:将其对应的正数7位二进制所有位数取反(1改为0,0改为1)后加1,并设置符号位(最高位)为1。如求-3的8位二进制补码方法:3的7位二进制数为0000011,取反后为1111100,加1后为1111101,设置符号位为1,-3的8位二进制补码为11111101。则十进制数-5的8位二进制补码为( A )
A.11111011 B.10000101 C.11111010 D.11111100
本题考查进制转换。根据题干5的7位二进制是0000101,取反后为1111010,加1后为1111011,设置符号位为1,则补码为11111011。故本题选A。
二、进制转换代码实现
1、十进制转二进制、十六进制
1.将十进制n转二进制数存储在字符变量s中。例如:n=10,转换成二进制数后s=“1010”
s="" # 字符变量清空
n=int(input())
while n>0:
r=n%2 # 取余
s=str(r)+s # 拼接
n=n//2 # 取整
print(s)
2.将十进制n转16进制数存储在字符变量s中。例如:n=42,转换成16进制数后s=“2A”
k="0123456789ABCDEF"
s=""
n=int(input())
while n>0:
r=n%16
s=k[r]+s
n=n//16
print(s)
2、 二进制转十进制
3.二进制数存储在字符串变量s中。使用“位权展开”法将二进制转换为十进制。结果存储在整数变量ans中。
法1:
s="10011"
ans = 0
n=len(s)
for i in range(n):
x=int(s[i])
ans=ans+x*2**(n-i-1)
print(ans)
4.二进制数存储在字符串变量s中。使用“累乘相加”法将二进制转换为十进制。结果存储在整数变量ans中。
法2:
s="10011"
ans=0
n=len(s)
for i in range(n):
x=int(s[i])
ans=ans*2+x
print(ans)
3、 十六进制转十进制
5.十六进制数存储在字符串变量s中。使用“位权展开”法将十六进制转换为十进制。结果存储在整数变量ans中。
法1:
s="2A"
ans=0
n=len(s)
for i in range(n):
ch=s[i]
if ch>="A" and ch<="Z":
x=ord(ch)-55
else:
x=int(ch)
ans=ans+x*16**(n-i-1)
print(ans)
5.十六进制数存储在字符串变量s中。使用“位权展开”法将十六进制转换为十进制。结果存储在整数变量ans中。
法2:
s="2A"
ans=0
n=len(s)
for i in range(n):
ch=s[i]
if ch>="A" and ch<="Z":
x=ord(ch)-55
else:
x=int(ch)
ans=ans*16+x
print(ans)
三、习题巩固
1、编写程序,实现如下功能:输入一个整数n,输入一个整数k,运行后,将十进制数n转换为k进制数并输出。比如n=25,k=2,转换为二进制后为“10011”,请补充代码。
n=int(input("请输入一个十进制整数n:"))
k=int(input("请输入要转换的进制k:"))
s=""
n1=n
while n1>0:
r=n1%k
n1=n1//k
if r>9 :
s=chr(r+55)+s
else:
s=str(r)+s
print(k,"进制数的",n,"为",s)
2、编写程序,实现如下功能:输入一个整数s,输入一个整数k,运行后,将k进制数s转换为十进制数并输出。比如s=”10011”,k=2,转换为十进制后为“25”,请补充代码。
法1:法2:
k = int(input("请输入一个进制:"))
s = input("请输入一个该进制数:")
n = len(s)
s1 = ""
ans = 0
for i in range(n):
s1 = s[i]
if s1 < "0" or s1 > "9":
s1 = str(ord(s1)-55)
ans = ans*k+int(s1)
print(ans)
k = int(input("请输入一个进制:"))
s = input("请输入一个该进制数:")
n = len(s)
s1 = ""
ans = 0
for i in range(n):
s1 = s[i]
if s1 < "0" or s1 > "9":
s1 = str(ord(s1)-55)
ans = ans+int(s1)*k**(n-i-1)
print(ans)
学科网(北京)股份有限公司
$