位运算
位运算符包括&(按位与)、|(按位或)~(按位异或)、>>(逻辑右移)、<<(逻辑左移)和一元运算符~(按位取反)。
请注意,在其他一些语言中,异或运算符为^,而在 Lua语言中^代表幂运算。
string.format( "%x", 0xff & 0xabcd) --> cd
string.format( "%x", 0xff | 0xabcd) --> abff
string.format( "%x", 0xaaaa ~ -1) --> ffffffffffff5555
string.format("%x", ~0) --> ffffffffffffffff
移位数是负数表示向相反的方向移位,即a>>n与a<<-n等价:
string.format("%x", 0xff << 12) --> ff000
string.format("%x", 0xff >> -12) --> ff000
如果移位数等于或大于整型表示的位数,由于所有的位都被从结果中移出了,所以结果是0:
string.format("%x", -1 << 80) -->0
无符号整型
Lua语言不显式支持无符号整型数
可用%u或&x在函数string.format中指定以无符号整型数进行输出
x = 13835058055282163712 -- 3<<62
x --> -4611686018427387904
string.format("%u", x) --> 13835058055282163712
string.format("0x%X", x) --> 0xc800008000000800
打包和解包二进制数据
函数string.pack会把值“打包”为二进制字符串,而函数string.unpack则从字符串中提取这些值。
todo