检查溢出

基本类型 / 数字 / 整型

-- No byte type: 200 + 100 stays 300
local b3 = 200 + 100
-- b3 = 300

-- Wrap on purpose: keep 8 bits
local wrapped = b3 & 0xFF
-- wrapped = 44

-- Fixed width: check the range yourself
local fits_byte = b3 >= 0 and b3 <= 255
-- fits_byte = false

-- 64 bit integers wrap around, no error
local max_int = math.maxinteger
-- max_int = 9223372036854775807
local over = max_int + 1
-- over = -9223372036854775808
local wraps = over == math.mininteger
-- wraps = true

-- A float does not wrap
local as_float = max_int + 1.0
-- as_float = 9.2233720368548e+18

-- -1 is the biggest unsigned number
local signed = 1 < -1
-- signed = false
local unsigned = math.ult(1, -1)
-- unsigned = true

print("b3 = " .. b3)
print("wrapped = " .. wrapped)
print("fits_byte = " .. tostring(fits_byte))
print("max_int = " .. max_int)
print("over = " .. over)
print("wraps = " .. tostring(wraps))
print("as_float = " .. as_float)
print("signed = " .. tostring(signed))
print("unsigned = " .. tostring(unsigned))