目次
前
次
2進数生成(Tcl/Tk)
Tcl/Tkでは、C言語の言語仕様と同じで2進数表現は
できません。それでは不便なので、プロシージャで
2進数への変換を書いて使います。
proc binary {x} {
set result ""
# copy
set xx $x
# separate
for {set i 0} {$i < 8} {incr i} {
set result "[expr $xx % 2] $result"
set xx [expr $xx / 2]
}
return $result
}
この例は、8ビットの2進数にするプロシージャです。
2進数は文字列で返しています。
2で割った商と余りを使っています。
余りを計算して、文字列の前に付け加えています。
16ビット、32ビットを使うことが多いので繰返しの
数を変えながら対応します。
proc binary8 {x} {
set result ""
# copy
set xx $x
# separate
for {set i 0} {$i < 8} {incr i} {
set result "[expr $xx % 2] $result"
set xx [expr $xx / 2]
}
return $result
}
proc binary16 {x} {
set result ""
# copy
set xx $x
# separate
for {set i 0} {$i < 16} {incr i} {
set result "[expr $xx % 2] $result"
set xx [expr $xx / 2]
}
return $result
}
proc binary32 {x} {
set result ""
# copy
set xx $x
# separate
for {set i 0} {$i < 32} {incr i} {
set result "[expr $xx % 2] $result"
set xx [expr $xx / 2]
}
return $result
}
8ビットの場合は、次のようになります。
次のスクリプトで実現しました。
proc binary8 {x} {
set result ""
# copy
set xx $x
# separate
for {set i 0} {$i < 8} {incr i} {
set result "[expr $xx % 2] $result"
set xx [expr $xx / 2]
}
return $result
}
for {set i 0} {$i < 256} {incr i} {
# lint
set d [format "%3d" $i]
# convert
set tmp [binary8 $i]
# show
puts "$d $tmp"
}
目次
前
次