This command assumes that the hex represents unsigned value:
set q 0xffffb764
set r [expr $q]
puts $r
Is there a simple way to make it treat q as representing a signed value rather than an unsigned value?
This is my solution:
proc hex_to_signed {value} {
set sign [expr {($value & 0b10000000000000000000000000000000)}]
set mag [expr {($value & 0b01111111111111111111111111111111)}]
if {$sign==0} {
set exp 0
} else {
set exp [expr -2**31]
}
set value [expr {$exp + $mag}]
return $value
}