A shift's width comes from any operand whose type is known — a name, an expression, or the type it is being stored into.
widths.zg
# A shift's width comes from any operand whose type is known — a name, an expression,# or the type it is being stored into (decided 2026-09-23). Same for not.bit and the wrapping forms.MAIN{let'v':uint32=3;let'a':uint32=2shl3;let'b':uint32=('v'mod.floor16)shl2;let'c':uint32=not.bit('v'plus1);let'd':uint32=('v'plus1)plus.wrap5;std::print.useful['a'," ",'b'," ",'c'," ",'d',newln];}