def binNibble(num):
nibb = bin(num)[2:]
k = 0 if len(nibb)%4 == 0 else 4-len(nibb)%4 # needs zeros?
nibb = "0"*k + nibb # add them here
return '_'.join(nibb[i:i+4] for i in range(0,len(nibb),4) ) # put _ in
for i in range(0,1152,127):
print(i,": ",binNibble(i))
import math
def bin_nibble(val):
num_bits = len(format(val, "b"))
return "_".join(reversed([format((val>>shift*4)&0x0F, "04b")
for shift in range(math.ceil(num_bits/4))]))
"""
INPUTS AND EXPECTED OUTPUTS:-
9 => "1001"
60 => "0011_1100"
100 => "0110_0100"
63000 => "1111_0110_0001_1000"
"""
def get_binary(n):
s = bin(n)[2:]; # Getting binary string
strs = [];
while s:
l = len(s); # Finding lenght of binary string
if l > 4:
strs.insert(0, s[l-4:]);
s = s[:l-4];
else:
l = len(s);
s = "0"*(4-l) + s; # If length is not equal to 4 (modify it by adding 0s to front)
strs.insert(0, s);
s = "";
return "_".join(strs);
# EXAMPLE 1
a = 9;
print(get_binary(a)); # 1001
# EXAMPLE 2
b = 60;
print(get_binary(b)); # 0011_1100
# EXAMPLE 3
c = 100;
print(get_binary(c)); # 0110_0100
# EXAMPLE 4
d = 63000;
print(get_binary(d)); # 1111_0110_0001_1000
def bin_nibble(a, pad=4):
b = '{:b}'.format(a)
if len(b) % pad:
b = '0' * (pad - (len(b) % pad)) + b
return '_'.join(b[k:k+pad] for k in range(0, len(b), pad))
tests = [9, 60, 100, 63000]
for k in tests:
print(bin_nibble(k))
7条答案
按热度按时间1yjd4xko1#
将逻辑拆分为4个组并进行连接。
quhf5bfb2#
尝试:
如果要添加前导零:
2ledvvac3#
从最高到最低:
输出:
您的示例:
niknxzdl4#
我已经实现了这个函数:
hrysbysz5#
@Tjaart,根据您的输入和预期输出,以下代码将按预期工作。
请尝试它,让我知道,如果它失败的任何您的输入。
ldxq2e6h6#
使用
str.format
的另一种方法:输出:
qacovj5a7#
我相信最简单的方法是使用格式(或使用格式的f字符串)。
019_b
表示0填充、19字符、“_”半字节分隔、二进制如果你想要最少的半字节数,你可能需要做一些数学运算来替换格式中的19,或者添加更多的填充和字符串,用空字符串替换任何
0000_
。例如,对于任何32位数字使用
039_b
。对于64位数字,您将使用079_b
,依此类推。