GEE中常用的位运算主要包括以下几种:
.rightShift()
.leftShift()
.bitwiseAnd()
.bitwiseOr()
.bitwiseXor()
本文简单介绍一下上述五种运算。
右移位、.rightShift()、>>
将一个数的各二进制位全部右移若干位。具体使用方式以下面的代码为例:
//随便设一个数,这里为155,转换二进制为10011011
var Test_dig = ee.Number(155);
//将Test_dig右移两位
var RS_result1 = Test_dig.rightShift(2)
print('结果1:', RS_result1)//值为38
//将155右移两位的第二种方式
var RS_result2 = 155 >> 2
print('结果2:', RS_result2)//值为38
上述操作如图所示:
![](https://img-blog.csdnimg.cn/img_convert/48790977c67e86bc5e5d3e8035d74367.png)
文字说明:155二进制为10011011,右移两位就变成了(00)100110,即38
左移位、.leftShift()、<<
将一个数的各二进制位全部左移若干位。具体使用方式以下面的代码为例:
//随便设一个数,这里为23,转换二进制为10111
var Test_dig = ee.Number(23);
//将Test_dig左移三位
var RS_result1 = Test_dig.leftShift(3)
print('结果1:', RS_result1)//值为184
//将23左移三位的第二种方式
var RS_result2 = 23 << 3
print('结果2:', RS_result2)//值为184
上述操作如图所示:
![](https://img-blog.csdnimg.cn/img_convert/77d26c4c6f77564d712ea140ddbca64e.png)
文字说明:看图和右移的文字说明吧,懒得写了。
按位与、.bitwiseAnd()
只有对应的两个二进位都为1时,结果位才为1。具体使用方式以下面的代码为例:
//随便设两个数,此处分别为22和21,转换二进制分别为10110和10101
var Test_dig1 = ee.Number(22);//10110
var Test_dig2 = ee.Number(21);//10101
//两个数进行按位与
var BA_result = Test_dig1.bitwiseAnd(Test_dig2)
print(BA_result)//值为20
上述操作如图所示:
![](https://img-blog.csdnimg.cn/img_convert/43404f863fd840682b173221c3ac4466.png)
文字说明:都是1才是1,不然就是0
按位或、.bitwiseOr()
只要对应的两个二进位有一个为1时,结果位就为1。具体使用方式以下面的代码为例:
//随便设两个数,此处分别为10和9,转换二进制分别为1010和1001
var Test_dig1 = ee.Number(10);//1010
var Test_dig2 = ee.Number(9); //1001
//两个数进行按位或
var BA_result = Test_dig1.bitwiseOr(Test_dig2)
print(BA_result)//值为11
上述操作如图所示:
![](https://img-blog.csdnimg.cn/img_convert/fb0feecb4723f805f34749893c994267.png)
文字说明:有1就是1,全0才是0
按位异或、.bitwiseXor()
对应的两个二进位相同时,结果位为0;对应的两个二进位不同时,结果位为1。具体使用方式以下面的代码为例:
//随便设两个数,此处分别为9和5,转换二进制分别为1001和(0)101
var Test_dig1 = ee.Number(9);//1001
var Test_dig2 = ee.Number(5);//0101
//两个数进行按位异或
var BA_result = Test_dig1.bitwiseXor(Test_dig2)
print(BA_result)//值为12
上述操作如图所示:
![](https://img-blog.csdnimg.cn/img_convert/ee11bf46bd71cbc076aaeca997a3ef04.png)
文字说明:如图所示,不想写了。
位运算是理解质量控制的关键,理解了位运算,再看生成云掩膜的相关代码就会轻松很多了。