Open lvcabral opened 5 years ago
Interesting! I'm curious if that's just a representation quirk in the reference implementation (in which it's actually an unsigned value internally and just prints as a negative signed value) or if it's stored internally as a signed value.
Quote by RokuKC from the forum (link below)
here are some somewhat subtle issues with respect to specifying integer constants and how type conversions and limit checks are performed.
Hex constants can represent a full 32-bit unsigned range of integers (0 .. &hFFFFFFFF - 4,294,967,295), as overlaid on a 32-bit signed integer variable. Values outside that range get clipped to 32-bits.
Integer constants should represent a full 32-bit signed range, but the current behavior is to only represent integer -999,999,999 .. 999,999,999. Values outside that range get implicitly promoted to type Double.
However, if you pass that Double value to an integer-typed parameter, or assign it to an integer-typed variable, it goes through a narrowing conversion back to signed integer. The value is out of range and in this case happens to be converted to an out of range value &h80000000, which happens to look like a reddish color value.
This code:
Shows in Roku console as: -1061109505 Shows in brs console as: 3233857791