『数学ガールの秘密ノート/ビットとバイナリー』
https://gyazo.com/1770ffe588c6280553670966e5a8cbff
プロローグ
第1章 指折りビット
第2章 変幻ピクセル
演算処理を実際に書いてみるあんも.icon
というのは巻末で練習として挙げられていた
16ビットに制限する必要がなさそう?なので変えたいあんも.icon
マジックナンバーを使うものはどうする?
code:F.txt
0000000000000000
0000000000000000
0011111111111100
0011111111111100
0011111111111100
0011100000000000
0011100000000000
0011111111100000
0011111111100000
0011111111100000
0011100000000000
0011100000000000
0011100000000000
0011100000000000
0000000000000000
0000000000000000
code:main.jl
function scan(file)
paper = open(file, "r")
data = UInt16[]
k = 0
while k < 16
x = readline(paper) # そのままテキストデータとして読み込まれる
x = parse(UInt16, x; base=2) # 2進数の文字列を符号なし16ビットの数値に変換
push!(data, x)
k += 1
end
close(paper)
return data
end
function print_bit(data)
k = 0
while k < 16
binary_str = bitstring(x) # 2進数の文字列に変換
println(binary_str)
k += 1
end
end
# scan("F.txt") |> filter |> print_bit
フィルタ
code:filter.jl
# ずらす
function right(data, shift = 1)
k = 0
filtered = UInt16[]
while k < 16
x = x >> shift
# x = x ÷ 2 # 10進数に戻さなくても動作するが、固定長でなくなる
push!(filtered, x)
k += 1
end
return filtered
end
scan("F.txt") |> right |> print_bit
# ビット反転
function complement(data)
k = 0
filtered = UInt16[]
while k < 16
x = ~x
# x \xor 0b1111_1111_1111_1111
push!(filtered, x)
k += 1
end
return filtered
end
scan("F.txt") |> complement |> print_bit
# 右と左を交換
function swap(data)
k = 0
filtered = UInt16[]
while k < 16
x = (x >> 8) | (x << 8)
push!(filtered, x)
k += 1
end
return filtered
end
scan("F.txt") |> swap |> print_bit
# 反転
function reverse_trick(data)
M1 = 0b0101_0101_0101_0101
M2 = 0b0011_0011_0011_0011
M4 = 0b0000_1111_0000_1111
M8 = 0b0000_0000_1111_1111
k = 0
filtered = UInt16[]
while k < 16
x = ((x & M1) << 1) | ((x >> 1) & M1)
x = ((x & M2) << 2) | ((x >> 2) & M2)
x = ((x & M4) << 4) | ((x >> 4) & M4)
x = ((x & M8) << 8) | ((x >> 8) & M8)
push!(filtered, x)
k += 1
end
return filtered
end
scan("F.txt") |> reverse_trick |> print_bit
第3章 コンプリメントの技法
第4章 フリップ・トリップ
エピローグ