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

proc pow2round {k {upto 4096}} {
    incr k -1
    for {set i 1} {$i < $upto} {set i [expr {$i << 1}]} {
	set k [expr {$k | $k >> $i}]
    }
    return [incr k]
}

foreach n {2689 
    2688
    4032
    4080
    4095
    4096
    2689
    1020
} {
    puts "$n: [pow2round $n]"
}