#tcl #bit
#tcl #бит
Вопрос:
get_bits вернет определенные биты значения, а set_bits установит определенные биты значения в указанное значение. Содержит ли TCL такие встроенные функции или они должны быть написаны пользователем?
Команда двоичного сканирования действительно близка к функции get_bits, но это не одно и то же.
Комментарии:
1. Каковы сигнатуры этих функций? Какие возвращаемые значения?
Ответ №1:
Нет конкретной функции для получения или установки определенного бита. Мы можем их сделать.
proc get_bit {value bit} {
expr {($value amp; (1 << $bit)) != 0}
}
proc set_bit {varName bit {value 1}} {
upvar 1 $varName var
if {$value} {
set var [expr {$var | (1 << $bit)}]
} else {
set var [expr {$var amp; ~(1 << $bit)}]
}
}
Они будут работать с целочисленными значениями любой ширины; вы не ограничены 32 битами или 64 битами.
# Lots of bits!
set x 123456789012345678901234567890
# Fetch a particular bit
puts [get_bit $x 17]
# Set a bit to 1
set_bit x 78
puts "x = $x"
# Set a bit to 0
set_bit x 75 0
puts "x = $x"
Комментарии:
1. как насчет get_bits и set_bits, т.е. Нескольких битов, а не только одного бита
2. @quantum231 Вы можете написать свой собственный на основе предоставленного однобитового кода?