Utpl implements C-style bitwise operations. One detail is that these operations coerce their operands to signed 64bit integer values internally. -- Expect stdout -- Left shift: 10 << 2 = 40 3.3 << 4.1 = 48 Right shift: 10 >> 2 = 2 3.3 >> 4.1 = 0 Bitwise and: 1234 & 200 = 192 120.3 & 54.3 = 48 Bitwise xor: 1234 ^ 200 = 1050 120.3 ^ 54.3 = 78 Bitwise or: 1234 | 200 = 1242 120.3 | 54.3 = 126 Complement: ~0 = -1 ~10.4 = -11 -- End -- -- Testcase -- Left shift: 10 << 2 = {{ 10 << 2 }} 3.3 << 4.1 = {{ 3.3 << 4.1 }} Right shift: 10 >> 2 = {{ 10 >> 2 }} 3.3 >> 4.1 = {{ 3.3 >> 4.1 }} Bitwise and: 1234 & 200 = {{ 1234 & 200 }} 120.3 & 54.3 = {{ 120.3 & 54.3 }} Bitwise xor: 1234 ^ 200 = {{ 1234 ^ 200 }} 120.3 ^ 54.3 = {{ 120.3 ^ 54.3 }} Bitwise or: 1234 | 200 = {{ 1234 | 200 }} 120.3 | 54.3 = {{ 120.3 | 54.3 }} Complement: ~0 = {{ ~0 }} ~10.4 = {{ ~10.4 }} -- End --