如何在Python中不用bin(),通过位运算按字节输出数字二进制表示
解决按字节拆分展示数字二进制的问题
你的代码报错是因为bytes对象不能直接拼接单个整数,必须将整数转为bytes类型(或用bytearray更灵活)。以下是修正后的实现:
方法一:用bytearray处理字节拆分
def print_binary_by_byte(num): if num == 0: print("0: 00000000") return # 收集每个字节(低字节在前) byte_list = bytearray() n = num while n: byte_list.append(n & 0xFF) n >>= 8 # 反转得到高字节在前的顺序 byte_list.reverse() # 将每个字节转为8位二进制字符串,用空格分隔 binary_parts = [f"{byte:08b}" for byte in byte_list] print(f"{num}: {' '.join(binary_parts)}") # 测试示例 print_binary_by_byte(127) print_binary_by_byte(1000)
运行结果:
127: 00000000 01111111 1000: 00000011 11101000
如果要匹配你示例里的7位二进制格式,只需把f"{byte:08b}"改成f"{byte:07b}",输出结果就会是:
127: 0000000 0111111 1000: 0000011 1110100
方法二:直接拼接bytes对象
如果坚持用bytes而不是bytearray,可以把整数放到列表中转成bytes再拼接:
def print_binary_by_byte(num): if num == 0: print("0: 00000000") return byte_data = bytes() n = num while n: # 将单个整数转为bytes(需包装成列表) byte_data = bytes([n & 0xFF]) + byte_data n >>= 8 binary_parts = [f"{byte:08b}" for byte in byte_data] print(f"{num}: {' '.join(binary_parts)}")
两种方法都能实现按字节拆分展示二进制的需求,核心是正确处理整数到bytes的转换,避免直接拼接单个整数的错误。
内容的提问来源于stack exchange,提问作者haruhi
相关产品推荐
相关产品推荐

