Posted to tcl by colin at Wed Feb 15 05:04:43 GMT 2012view raw

  1. proc pow2round {k {upto 4096}} {
  2. incr k -1
  3. for {set i 1} {$i < $upto} {set i [expr {$i << 1}]} {
  4. set k [expr {$k | $k >> $i}]
  5. }
  6. return [incr k]
  7. }
  8.  
  9. foreach n {2689
  10. 2688
  11. 4032
  12. 4080
  13. 4095
  14. 4096
  15. 2689
  16. 1020
  17. } {
  18. puts "$n: [pow2round $n]"
  19. }