Board logo

标题: [转载教程] [PowerShell教程][11]PowerShell中的加法运算 [打印本页]

作者: wankoilz    时间: 2011-5-22 10:49     标题: [PowerShell教程][11]PowerShell中的加法运算

[PowerShell教程][01]初识PowerShellhttp://bbs.bathome.net/thread-12415-1-1.html
[PowerShell教程][02]PowerShell基础知识之一http://bbs.bathome.net/thread-12416-1-1.html
[PowerShell教程][03]PowerShell数据类型之整型http://bbs.bathome.net/thread-12417-1-1.html
[PowerShell教程][04]PowerShell面向对象基础之一http://bbs.bathome.net/thread-12418-1-1.html
[PowerShell教程][05]PowerShell面向对象基础之二http://bbs.bathome.net/thread-12419-1-1.html
[PowerShell教程][06]PowerShell中格式化命令和输出命令http://bbs.bathome.net/thread-12420-1-1.html
[PowerShell教程][07]PowerShell中Write族cmdlet的介绍和使用http://bbs.bathome.net/thread-12421-1-1.html
[PowerShell教程][08]字符串字面值http://bbs.bathome.net/thread-12422-1-1.html
[PowerShell教程][09]PowerShell中的数组使用http://bbs.bathome.net/thread-12423-1-1.html
[PowerShell教程][10]PowerShell中的HashTable的使用http://bbs.bathome.net/thread-12424-1-1.html
[PowerShell教程][11]PowerShell中的加法运算http://bbs.bathome.net/thread-12425-1-1.html

说明:教程转自 http://bbs.winos.cn/thread-35543-1-1.html


作者: Edengundam(马涛)


加法运算
大家已经PowerShell中的运算符有了一定感性的认识。我们首先来学习“+”运算符。PowerShell定义了“+”运算符处理数值类型、字符串类型、数组类型和哈希表类型的具体行为。在进行数值计算时,“+”和平时的数值计算规则基本一样。不过需要注意,由于计算机内部表示不同数值类型时,使用的存储空间不同,因此这些类型都只能表示一个范围内的数据。在进行数值运算的过程中,如果计算结果超过了参与计算数值类型的值域时,PowerShell将会自动进行类型转换,使用值域更大的数据类型来保存结果。例如:
  1. PS C:\> 9 + 11
  2. 20
  3. PS C:\> (9 + 11).GetType().FullName
  4. System.Int32
  5. PS C:\> [int]::MaxValue + 1
  6. 2147483648
  7. PS C:\> ([int]::MaxValue + 1).GetType().FullName
  8. System.Double
  9. PS C:\> [int]::MinValue - 1
  10. -2147483649
  11. PS C:\> ([int]::MinValue - 1).GetType().FullName
  12. System.Double
复制代码
例子中的[int]::MaxValue表示类型int的最大值,如果再执行“+ 1”的运算,就会导致该数值超出int类型的值域,因此PowerShell自动将数据类型转换为Double类型。类似的,[int]::MinValue表示了int类型的最小值。
当对字符串类型操作数使用“+”运算符时,PowerShell将会对字符串进行连接操作,返回一个新的字符串,这种操作在C#语言中、SQL Server数据库的T-SQL语法中是一致的。例如:
  1. PS C:\> "Hello" + " " + "world!"
  2. Hello world!
复制代码
当对数组类型操作数使用“+”运算符时,将会执行数组连接操作,返回一个新的数组,这与在C#语言中的行为一致。例如:
  1. PS C:\> $array1 = 1,2,3
  2. PS C:\> $array2 = 4,5
  3. PS C:\> $array3 = $array1 + $array2
  4. PS C:\> "$array3"
  5. 1 2 3 4 5
复制代码
例子中首先定义了数组array1,它包含1、2和3这三个元素。接下来用数组array1与数组array2相加,并将返回结果存储在变量array3中。最后,输出数组中的元素到控制台。在PowerShell中,双引号中引用数组时,数组的每个元素将会被存储在变量$ofs中的字符串相互连接,并输出。(“$ofs”的默认值为空格字符)。
当对哈希表类型操作数使用“+”运算符时,PowerShell将把“+”右边的哈希表键值对添加到左边的哈希表中。如果添加的键值已经存在于左边哈希表中,PowerShell就会给出错误提示。例如:
  1. PS C:\> $dev = @{ Tom = 1; Jerry = 2}
  2. PS C:\> $sale = @{ Hero = 1; }
  3. PS C:\> $dev + $sale
  4. Name  Value
  5. ----  -----
  6. Tom   1
  7. Jerry 2
  8. Hero  1
复制代码
例子的开头定义了哈希表dev,它包含了研发部门的员工Tom和Jerry。接下来定义了哈希表sale,员工只有Hero一人。将dev和sale相加后得到包含这三名员工的新哈希表。如果右边哈希表中包含了与左边哈希表相同的键值对,PowerShell将会给出错误信息:
  1. PS C:\> $manager = @{ Tom = 3 }
  2. PS C:\> $dev + $manager
  3. Bad argument to operator '+': 已添加项。字典中的关键字:“Tom”所添加的关键字:“Tom”.
  4. At line:1 char:7
  5. + $dev + <<<< $manager
复制代码
在前面的例子中,都是相同类型的对象相加。您可能正在思考,如果在“+”两边不是相同类型的对象,结果到底会是什么呢?下面是一些常见的情况:
  1. PS C:\> 123 + '23'
  2. 146
  3. PS C:\> 123 + '0xa'
  4. 133
  5. PS C:\> 4 + 'test'
  6. Cannot convert value "test" to type "System.Int32". Error: "Input string was not in a correct format."
  7. At line:1 char:4
  8. + 4 +
  9. <<<< 'test'
  10. PS C:\> '02' + 73
  11. 0273
复制代码
PowerShell在发现“+”运算符时,将会根据左操作数的类型来决定计算的规则。在第一个表达式中123 + '23'中,123是整数,因此“+”执行数值加法运算。但是由于右操作数是字符串类型,因此PowerShell首先对该操作数进行类型转换。所以最后,我们看到结果为数值类型的值:146。第二个例子中,字符串包含了一个整数的十六进制表示形式,PowerShell将该数值正确转换成数值类型并进行计算。第三个例子中,字符串'test'是无法转换为整数类型的,因此PowerShell给出错误信息:“输入串的格式不正确”。第四个例子中,左操作数变成了包含数字的字符串,因此PowerShell执行了字符串的连接操作。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2