按位运算符

所有按位运算符总是将操作数转换为32位整数所有按位运算符总是将操作数转换为32位整数(除 >>> 转为无符号32位整数以外,其他位运算符转为32位有符号整数),然后以二进制形式按位运算,0为假,1为真。不支持运算符重载。
aardio支持自定义进制数值,语法为 自定义进值 + '#' + 数值。
因此可以用 2#101表示二进制数101,按位运算符都是针对二进制数的操作,因此下面使用二进制数来演示。
在实际使用时可以使用十进制数值(所有进制最终都是以二进制存储、按位运算并无区别。)

按位取反 ~

求反运算符~为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。
例如:

var b  = string.format("2#%b",~2#101  ); 
io.open();io.print( b); //显示2#11111111111111111111111111111010


按位与 &

按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例如 :

var b  = string.format("2#%b",2#101 & 2#100 ); 
io.open();io.print( b); //显示2#100


按位或 |

按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
例如 :

var b  = string.format("2#%b",2#101 | 2#110 ); 
io.open();io.print( b); //显示2#111

按位异或 ^

按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或。只要对应的二个二进位相同,结果位就为0,否则为1。参与运算的两个数均以补码出现。
例如 :

var b  = string.format("2#%03b",2#101 ^ 2#110 ); 
io.open();io.print( b); //显示2#011


按位左移 <<

a << n 将数值a按位向左移动n位(如果n大于等于32,则为n对32取模结果的位数)。
左移n位就相当于乘以2的n次方(在没有溢出的前提下) 。
例如 :

var b  = string.format("2#%b",2#101 << 1  ); 
io.open();io.print( b); //显示2#1010


按位右移 >>

a >> n 将数值a按位向右移动n位(如果n大于等于32,则为n对32取模结果的位数) ,保留符号位(负数保持最高位为1)
右移n位就相当于除以2的n次方(在没有溢出的前提下)
例如 :

var b  = string.format("2#%b",2#101 >>1 ); 
io.open();io.print( b); //显示2#10

按位无符号右移 >>>

a >>> n 将数值a按位向右移动n位(如果n大于等于32,则为n对32取模结果的位数) ,不保留符号位(负数不保持最高位为1,因此右移后会变成正数)。

例如 :

io.open();
io.print( -2>>>18 ); //显示16383

可以通过右移 0 位将有符号数强制转换为无符号数。例如 -1 >>> 0 的值为 0xFFFFFFFF —— 其作用等价于 raw.convert( {int value = -1},{INT value}).value。 不声明调用静态 API 默认会返回 32位有符号整数,如果原 API 返回的是 32位无符号整数,那么只要简单的将返回值 >>> 0 就可以得到原来的无符号数值了。