Если все значения находятся в диапазоне поля, в которое они должны быть вставлены, вы можете просто сдвинуть их и объединить ИЛИ вместе.
set value 0
set value [expr {$value | ($value1 << 0)}]
set value [expr {$value | ($value2 << 23)}]
set value [expr {$value | ($value3 << 25)}]
set value [expr {$value | ($value4 << 26)}]
set value [expr {$value | ($value5 << 41)}]
set value [expr {$value | ($value6 << 51)}]
Если они не обязательно находятся в диапазоне, перед сдвигом необходимо замаскировать биты, выходящие за пределы допустимого диапазона.
Обратите внимание, что вам нужно no специальное действие для перехода через границы байта или слова. Если вам нужно битовое поле шириной в тысячи мест, вы можете его получить. (Целые числа Tcl обычно «настолько широки, насколько они должны быть» и не имеют технической верхней границы, пока вы не столкнетесь с проблемами управления памятью.)