It depends on precisely what you want to do, which in turn depends on the wider context of the algorithm. Tcl uses a model of integers based on bignums (even though it usually uses smaller types for the implementation) which means that we need to reinterpret the value.
binary scan [binary format i [expr {$x << $c}]] i theResult
# theResult = -293412352
However, if you just want to mask the bits off and don't really want the sign changing, do this:
set theResult [expr {($x << $c) & 0xffffffff}]
# theResult = 4001554944
(All results checked with Tcl 8.5 and Tcl 8.6 on a 64-bit platform, but any variation on a 32-bit platform would be considered to be a critical bug; Tcl's fairly careful in its numeric code to create the illusion of numbers not having a finite number of bits available, except in the binary
command — as used above — and in the format
and scan
commands, though not in a way that's useful here.)