aardio 文档

按位运算符

aardio 的所有按位运算符总是将操作数转换为 32 位整数(除 >>> 转为无符号 32 位整数以外,其他位运算符转为 32 位有符号整数),然后以二进制形式按位运算。

逻辑按位运算以 0 为假,1 为真。

按位运算符不支持运算符重载。

aardio 支持自定义进制数值,语法为 自定义进值 + '#' + 数值。 因此可以用 2#101 表示二进制数 101,按位运算符都是针对二进制数的操作,因此下面使用二进制数来演示。在实际使用时可以使用十进制数值(所有进制最终都是以二进制存储、按位运算并无区别) 。

按位与: &

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

示例:

import console.int; 

//按位与
var b = 2#101 & 2#100 ; 

//显示2#100
console.printf("2#%b",b); 

按位或: |

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

示例:

import console.int; 

//按位或
var b = 2#101 | 2#110 ; 

//显示2#111
console.printf("2#%b",b); 

按位异或: ^

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

示例:

import console.int; 

//按位异或
var b = 2#101 ^ 2#110; 

////显示2#011
console.printf("2#%b",b); 

按位取反: ~

按位取反运算符 ~ 为单目运算符,具有右结合性。其功能是对参与运算的数的所有二进制位做按位取反运算。

例如:

import console.int; 

//按位取反
var b = ~2#101; 

//显示 2#11111111111111111111111111111010
console.printf("2#%b",b); 

按位左移: <<

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

示例:

import console.int; 

//按位左移
var b = 2#101 << 1;  

//显示2#1010
console.printf("2#%b",b); 

按位右移: >>

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

示例:

import console.int; 

//按位右移
var b = 2#101 >>1;  

//显示2#10
console.printf("2#%b",b); 

按位无符号右移: >>> #

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

示例:

import console.int; 

//按位无符号右移
var b = -2>>>18;  

//显示 16383
console.print(b); 

可以通过右移 0 位将有符号数强制转换为无符号数。

例如 -1 >>> 0 的值为 0xFFFFFFFF —— 其作用等价于 raw.convert( {int value = -1},{INT value}).value

不声明调用原生 API 默认会返回 32 位有符号整数,如果原 API 返回的是 32 位无符号整数,那么只要简单的将返回值 >>> 0 就可以得到原来的无符号数值了。

Markdown 格式