get_bits将返回值的特定位,而set_bits将值的特定位设置为指定值。TCL包含这样的内置函数吗?还是应该由用户自己编写?
二进制扫描命令确实很接近get_bits函数,但并不是一回事。
发布于 2021-02-24 20:16:26
没有用于获取或设置特定位的特定函数。我们可以做到的。
proc get_bit {value bit} {
expr {($value & (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 & ~(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"https://stackoverflow.com/questions/66349844
复制相似问题