目次

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"
}


目次

inserted by FC2 system