GEE必须会教程—二进制相关

在了解GEE的Number数值类型的基础上,今天要学习一些特殊的运算符,比如左移运算符和右移运算符,以及编程语言中常见的按位运算。由于按位运算和遥感影像中的去云处理密切相关,因此今天将连带分享GEE中常见的去云处理的方法。

跟着小编,开始今天的学习吧!

一、学习目标

(1)理解左移和右移运算的原理

(2)理解“与”和“或”两种按位运算的原理

(3)掌握GEE中对遥感影像处理的方法

二、代码学习

(1)左移运算符和右移运算符

“<<”即箭头方向向左边为左移,“>>”即箭头方向右边为右移。两者为编程语言中比较特殊的运算符。理解该符号需要从二进制的角度:

现随机给出两个数a、b,其中a=3,b=4,现需求a<<b。

a的二进制表示方式:3 = 1*2^1+0*2^0

0011

3<<4,表示的意思是3现有的二进制位数整体向左移4位

00110000

此时的结果为:result = 1*2^5+1*2^4+0*2^3+0*2^2+0*2^1+0*2^0 = (2+1)*2^4 = 48。从上述结果我们可以看出,左移的计算公式就是:

result = a*2^b

右移的理解以此类推,现随机给出两个数c、d,其中c=8,d=3,现需求c>>d。

c的二进制表示方式:8 = 1*2^3+0*2^2+0*2^1+0*2^0

1000

8>>3,表示的意思是8现有的二进制位数整体向右移3位

0001

此时的结果为:result = 1*2^0 = (1*2^3+0*2^2+0*2^1+0*2^0)/(2^3)。从上述结果我们可以看出,右移的计算公式就是:

result = a/(2^b)

//左移和右移运算符计算
var a = 3<<4;
print("Left Move",a);//left move
var b = 8>>3;
print("Right Move",b);//right move 

(2)按位运算

按位运算,这里的位,不用多说,自然还是进制的概念。按位运算的实质就是将十进制的数字转化为二进制的数字,再进一步进行计算。二进制的数为0或1,两个数字常用于逻辑运算符的判断,通过二进制对应位置数的联合构建起四种运算,主要包括有与运算、或运算、异或运算和求反运算。在常规的数据处理过程中,与运算和或运算运用比较广泛,需要重点掌握。

A.与运算

与运算的计算规则为:两1才为1,有0便为0,即

1 and 1 = 1,1 and 0 = 0,0 and 1 = 0,0 and 0 = 0

现给定a、b两个数进行与运算,其中a = 2,b = 3。

0010
0011

按照从右至左的顺序依次比较,各位置对应的结果如下所示:

0010

转化为十进制后得到的结果为2。

B.或运算

或运算的规则是:有1即为1,无1便为0,即

1 and 1 = 1,1 and 0 = 1,0 and 1 = 1,0 and 0 = 0

现给定a、b两个数进行与运算,其中a = 2,b = 3。

0010
0011

按照从右至左的顺序依次比较,各位置对应的结果如下所示:

0011

转化为十进制后得到的结果为3。

C.取反运算

取反运算时,只有一个操作数。在讲解取反的规则之前,首先要理解补码的概念。补码是一种表示有符号整数的编码方式。在计算机中,可以使用补码来表示负数,以及进行加减运算。一般使用8位补码表示整数。计算机在存储二进制时,最高位分别用0和1区分正数和负数补码的表示方式是将正数的二进制表示保持不变,负数的二进制表示取反后再加1。这样可以使得计算机在进行加减运算时,只需要使用同一套逻辑电路,简化了硬件设计。取反表示为0变1,1变0的过程。

似乎不好理解,我们举个例子来说明一下。

正数2的二进制表示为:

00000010

对上述每一位二进制数进行取反为:

11111101

符号位变成1,说明取反运算后,结果变成负数,根据补码的定义,此时得到的结果为该负数的补码。

那么,该二进制表示的负数究竟是哪个十进制数字呢?

别急,我们先了解一下负数二进制的表示方法:

①原码表示:符号位定1,其余位为负数的绝对值的二进制。例如,要用原码表示-2:

10000010

②反码表示:符号位定1,其余位在原码表示的基础上取反。例如,要用原码表示-2:

11111101

③补码表示:符号位定1,其余位取反之后加1。例如,要用原码表示-2:

11111110

了解完上述负数在电脑中的三种表示方式之后,为了求出二进制补码表示的原来的负数,是一个逆运算的过程。只需要在原来的基础上减1,并求反即可。

先对求反之后的结果减1得到:

11111100

再取反:

10000011

此时得出:

result = -( 1*2^1+1*2^0) = - 3

上述推导过程有点绕,希望各位读者能够结合实例按照过程自行推到一遍。

D.异或运算

异或运算,也称为“异或操作”或“X操作”,是一种逻辑运算符。它的作用是对两个操作数进行比较,如果两个操作数的对应位不同,则结果1,否则结果为0。说大白话就是:相等就是0,不等就是1。

1 and 1 = 0,1 and 0 = 1,0 and 1 = 1,0 and 0= 0

现给定a、b两个数进行与运算,其中a = 2,b = 3。

0010
0011

按照从右至左的顺序依次比较,各位置对应的结果如下所示:

0001

转化为十进制后得到的结果为1。

var c = ee.Number(2);
var d = ee.Number(3);
var e1 = c.bitwiseAnd(d);
var e2 = c.bitwiseOr(d);
var e3 = c.bitwiseNot();
var e4 = c.bitwiseXor(d);
print("a bitwiseAnd b:",e1,"a bitwiseOr b:",e2);
print("a bitwiseNot b:",e3,"a bitwiseXor b:",e4);

今天主要带大家回顾了二进制的相关知识,涉及的代码很简单,但是原理有点绕,希望对大家了解相关的逻辑有帮助,注意啦,今天的按位运算和遥感影像中非常重要的去云处理有密切关系,明天将对遥感影像的去云处理进行分享。

如果今天的分享对你有帮助,不要忘记给小编点赞哦,你的鼓励是小编持续创作的动力!更多精彩内容,欢迎关注小编的微信公众号“梧桐凉月”,谢谢大家!

  • 32
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值