IDL学习:语法基础-运算

        运算符优先级从小到大排序依次为:条件运算符、逻辑运算符、位运算符、关系运算符、数字运算符、括号运算符。

1. 条件运算符

        IDL的条件运算符是“?:”,语法为

value = expr1 ? expr2 : expr3

其含义表示为,若expr1为ture,则value=expr2,反之value=expr3。

>>expr1 = 1;
>>expr2 = 'expr1是真'
>>expr3 = 'expr1是假'
>>value = expr1?expr2:expr3
>>print,value
expr1是真
>>expr1 = 0;
>>expr2 = 'expr1是真'
>>expr3 = 'expr1是假'
>>value = expr1?expr2:expr3
>>print,value
expr1是假

2. 逻辑运算符

        逻辑预算符包括:与(&&)、或(||)、非(~)。

  • :全真为真;
  • :有真为真;
  • :真即时假,假即时真。
>>print,1&&2&&3
   1
>>print,1&&2&&0
   0
>>;注:负数表示真
>>print,1&&-1
   1
>>print,0||2||0
   1
>>print,-1||-2||1
   1
>>print,~2
   0
>>print,~(-1)
   0
>>print,~(0)
   1

3. 位运算符

        位运算符是针对“位”来计算的,是需要将两个数转化为二进制,位数一一对应进行位加符“AND”、位取反符“NOT”、位或符“OR”、位异或符“XOR”。不懂原理的可以参考这个博客

3.1 位加AND

        有的书称呼这个为位与,相当于与“&&”相比,只不过这个是针对位计算,或则说是需要转化为二进制来进行处理。例如:3和7位于,其中3转化为2进制数为0011,7对应的二进制数为0111,二者对应位上的数进行位加(与运算),得到0011,这个数转化为十进制数为3,因此结果为3。

>>print,3 && 7
   1
>>print,3 And 7
       3

3.2 位或符

        机理与位加AND一样。例如:10和7进行位或计算,10对应的二进制数为1010,7对应的二进制数为0111,对应位进行或运算,得到1111,转化为十进制数为15,因此结果为15。

>>print,10 OR 7
      15

3.3 位取反符

        机理与位加AND一样,例如:对2进行位取反,1对应的二进制数为0000,每位数进行取反,得到1110,由于最高位为符号位(符号位0表示正,1表示负),复数在计算机中使用补码来表示,补码“110”对应的值按照“取反加1”得到1010,因此结果为-2《IDL程序设计——数据可视化与ENVI二次开发》。

>>print, Not 1
      -2

3.4 位异或符

        异或可以表示成。

A XOr B = (Not A Or B) And (A OR Not B)

位异或是指在“位”上进行异或操作。

>>print,3 Xor 7
       4

4. 关系运算符

        关系运算符有:大于GT、大于等于GE、等于EQ、小于等于LE、小于LT。

大于来自英文单词Great,等于来自单词Equal、小于来自单词Less

>>print,3 GE 7
   0

 注:在IDL中,“>”表示去大运算,“<”表示去小运算。这个不是大于、小于!!!

​
>>print,3 > 7        ; 取大
       7

​

5. 数字运算符

        数字运算符有加+、减-、乘*、除/、取大>、取小<、取余Mod。

>>print,13 Mod 7
       6
>>print,3 > 7
       7
>>print,3 < 7
       3

6. 矩阵运算符

        在matlab中,矩阵的运算和采用的是数字运算符的方式进行运算的,然而IDL中有很大的区别。

6.1 矩阵数字运算符

        矩阵中“+”、“-”、“*”和“/”表示对应位置的元素进行计算。注,矩阵对应元素相除时,二者维度必须一致。

A = [[1,2,3],[4,5,6]]
>>A
       1       2       3
       4       5       6
>>B = Indgen(2,3)
>>B
       0       1
       2       3
       4       5
>>C = A*B
>>C
       0       2       6
      12      20      30
>>D = A *A
>>D
       1       4       9
      16      25      36
>>E = A /A
>>E
       1       1       1
       1       1       1
>>F = A /B
% Program caused arithmetic error: Integer
   divide by 0
>>G
       1       3       5
       7       9      11

        注:若矩阵+一个常数,则表示举证中的每个元素都加上这个常数;若矩阵*或/一个常数,则表示举证中的每个元素都*或/这个常数。 

>>H = A+1
>>H
       2       3       4
       5       6       7

6.2 矩阵相乘

        线性方程中的矩阵相乘(矩阵乘积,行乘以列)用“##”表示,即一个3×2(3行2列)的矩阵乘以2×3(2列3行)的矩阵,得到3×3的矩阵。

>>A = [[1,2,3],[4,5,6]]-5
>>A
      -4      -3      -2
      -1       0       1
>>B = Indgen(2,3)+1
>>B
       1       2
       3       4
       5       6
>>C = B ##A
>>C
          -6          -3           0
         -16          -9          -2
         -26         -15          -4

注:IDL中还有一个“#”运算符,表示(列乘以行),A#B相当于B##A

>>D = A#B
>>D
          -6          -3           0
         -16          -9          -2
         -26         -15          -4

7. 括号运算符

        括号运算符有小括号“()”,也称之为圆括号,以及中括号“[]”,也称之为方括号。其中“[]”是用来表示矩阵的。注:没有大括号。

>>Print,(3+4)*5
      35

不足之处,敬请斧正!

转载请说明出处

路漫漫其修远兮,吾将上下而求索。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心网千结

若有所帮助,请点赞支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值