64 << 0 = 64 (64) 64 << 2 = 256 (256) -64 << 2 = -256 (-256) 64 << -2 = int.(<<): second operand is out of range (expected failure) -64 << -2 = int.(<<): second operand is out of range (expected failure) 64 << -256 = int.(<<): second operand is out of range (expected failure) -64 << -256 = int.(<<): second operand is out of range (expected failure) 25 << 3 = 200 (200) -25 << 3 = -200 (-200) 25 << -3 = int.(<<): second operand is out of range (expected failure) -25 << -3 = int.(<<): second operand is out of range (expected failure) 64 >> 0 = 64 (64) 64 >> 2 = 16 (16) -64 >> 2 = -16 (-16) 64 >> -2 = int.(>>): second operand is out of range (expected failure) -64 >> -2 = int.(>>): second operand is out of range (expected failure) 64 >> 256 = int.(>>): second operand is out of range (expected failure) -64 >> 256 = int.(>>): second operand is out of range (expected failure) 25 >> 3 = 3 (3) -25 >> 3 = -4 (-4) 25 >> -3 = int.(>>): second operand is out of range (expected failure) -25 >> -3 = int.(>>): second operand is out of range (expected failure) 64 uhch_<< 2 = 256 (256) -64 unch_>> 2 = -16 (-16) The following cases test undefined behaviour (they cause overflow): 64 unch_<< 256 = 64 (0) -64 unch_<< 256 = -64 (0) 64 unch_>> -256 = 64 (0) -64 unch_>> -256 = -64 (0)