【備忘録】10→2進数 と 2→10進数(進数の関数)

python3
あくまで備忘録なんで雑に記録します

①10進数を2進数に

whileにして >=1 にしてリストに入れやすいから、長めの筆算

X = int(input())
B = []
while X >= 1:
    B.insert(0, str(X % 2))#筆算のあまりを、str化、逆ならべリスト化
    X = X // 2#筆算の商に再帰をかけると、どんどん小さくなっていく
B = ''.join(B)#str化しているから、そのまま足せる

if not B:#0だけ空リストになるから、空リストなら0を
    print(0)
else:
    print(B)

def化して1〜255まで羅列

def f(X):
    B = []
    while X >= 1:
        B.insert(0, str(X % 2))
        X = X // 2
    B = ''.join(B)
    return B
    
for i in range(256):
    print(f(i))

もっと単純に10→2

X = int(input())
B = bin(X)[2:]
#X=7 111
#X=8 1000

②2進数を10進数に

こっちは簡単

B = input()#strのまま
X = 0
for i in range(len(B)):
    X += int(B[i*-1 - 1]) * (2**i)
print(X)

def化して1〜255まで羅列した2進数を10進数に

def f(B):#B→X
    X = 0
    for i in range(len(B)):
        X += int(B[i * -1 - 1]) * (2 ** i)
    return X

def g(X):#X→B
    B = []
    while X >= 1:
        B.insert(0, str(X % 2))
        X = X // 2
    B = ''.join(B)
    return B

for j in range(1,256):
    print(f(g(j)))
def base_10_to_n(X, n):#10進数をn進数に
    if X // n == 0:#剰余の商が0になれば終了
        return str(X % n)#剰余の余をリターン
    else:
        return base_10_to_n(X//n, n) + str(X % n)

def base_n_to_10(B, n):#Bはstr入力で!n進数を10進数に
    out = 0
    for i in range(1, len(str(B)) + 1):
        out += int(B[-i]) * (n ** (i - 1))
    return out

もっと単純に2→10

B = input()
X = int(B, base=2)
#B=111 7
#B=1000 8

コメント

タイトルとURLをコピーしました