lshift (value shiftCount -- shiftedValue)shiftedValue: Left-shift result in the same schema.lshift consumes two Whole values. value provides the bits to shift and the schema of the result. shiftCount provides the shift amount and may use a different Whole schema.
The bits of value move to the left. Zero bits are inserted at the low end and bits shifted past the high end are discarded.
The result always keeps the same schema as value.
shiftCount uses an Int schema, its bit pattern is first reinterpreted as the matching Nat width. Non-negative Int shift counts therefore behave the same as equal-valued Nat shift counts.1 31 lshift therefore produces -2147483648.value is known zero, the result is known zero even when shiftCount is unknown.value.{} () {} [
"-- nat32 --" printCompilerMessage
3n32 2 lshift printStack _:;
3n32 1i8 lshift printStack _:;
"-- nat8 dropped bits --" printCompilerMessage
0x80n8 1 lshift printStack _:;
"-- zero and unknown shift --" printCompilerMessage
unknownShift: 0n32 dynamic;
0n32 unknownShift lshift printStack _:;
"-- unknown value and zero shiftCount --" printCompilerMessage
unknownNat: 0n32 dynamic;
unknownNat 0 lshift printStack _:;
"-- int32 --" printCompilerMessage
5 1 lshift printStack _:;
1 31 lshift printStack _:;
] "main" exportFunction
-- nat32 --
12n32
6n32
-- nat8 dropped bits --
0n8
-- zero and unknown shift --
0n32
-- unknown value and zero shiftCount --
Nat32
-- int32 --
10
-2147483648
and builtin (leftOperand rightOperand -- combinedValue) Combines two Cond or Whole values with bitwise or logical AND semantics.or builtin (leftOperand rightOperand -- combinedValue) Combines two Cond or Whole values with bitwise or logical OR semantics.rshift builtin (value shiftCount -- shiftedValue) Performs a bitwise right shift on a Whole value and keeps the same schema.xor builtin (leftOperand rightOperand -- combinedValue) Combines two Cond or Whole values with logical exclusive-OR or bitwise XOR semantics.~ builtin (value -- invertedValue) Performs logical NOT for Cond or bitwise complement for a Whole value.