在前两节学习中多次遇到变量和表达式的概念,这节分别对这两个概念做详细分析:
变量:在TCL中变量可分为简单变量和关联数组。
(1) 简单变量:简单变量由变量名字和变量值组成,它们都可以用字符串表示,如“ask%dk :09213ds”可以表示一个变量的名字或者值,但是一般不建议这么表示,最好是按照C语言中变量名命名规则来命名。
在前两节经常用到set命令,它可以创建未定义的变量,并赋值;也可以改变已定义的变量的值。此处创建变量没有明确定义变量的数据类型,其实在TCL中自动对变量进行数据存储,如图1所示,命令set a 12.6,它是将12.6以字符串的形式赋值给变量a,存储按字符串类型存储;命令set a [expr $a + 1.2],其中需要取出a中的值进行表达式计算,因此需要将a中的值由字符串类型转换到浮点数类型,这个操作是TCL自动完成的,然后计算结果以浮点数类型赋值给变量a,这时a变量的值是按浮点数类型存储。TCL的这种内部表达形式可以高效率地处理变量的值,TCL解释器会自动为变量管理内存,因此无需进行变量声明。
图1
(2) 关联数组:有数组名和数组中元素名组成,与C语言中的数组类似,但不同的是TCL中数组元素名不一定是阿拉伯数组,可以由字符串表示,如a(b)是TCL中的关联数组,数组名是a,数组元素名是b。这边介绍几个对数组操作的命令,如图2所示,set命令可以对一个数组赋值,与简单变量相似;array size命令是返回数组的元素个数;array name命令是返回数组的所有元素名。
图2
表达式:表达式的作用就是将操作数与操作符联合起来,产生新的值。
表达式中的操作数一般都是整数或者实数,整数可以是十进制的(普通格式)、二进制的(以0b开头)、八进制的(以0o开头)或者十六进制的(以0x开头)。如图3所示,整数16的不同进制的表达方式。
图3
表达式中的操作符如表1所示,其中包含算术操作符、关系操作符、逻辑操作符、按位操作符和选择操作符。
表1
语法 |
结果 |
操作数类型 |
-a |
a的负值 |
整数、实数 |
+a |
对a做一元加操作 |
整数、实数 |
!a |
逻辑非 |
整数、实数 |
~a |
a按位取反 |
整数 |
a**b |
a的b次方 |
整数、实数 |
a*b |
乘 |
整数、实数 |
a/b |
除 |
整数、实数 |
a%b |
取余 |
整数 |
a+b |
加 |
整数、实数 |
a-b |
减 |
整数、实数 |
a<<b |
a左移b位 |
整数 |
a>>b |
a算术右移b位 |
整数 |
a<b |
如果a小于b,返回1,否则为0 |
整数、实数、字符串 |
a>b |
如果a大于b,返回1,否则为0 |
整数、实数、字符串 |
a<=b |
如果a小于等于b,返回1,否则为0 |
整数、实数、字符串 |
a>=b |
如果a大于等于b,返回1,否则为0 |
整数、实数、字符串 |
a==b |
如果a等于b,返回1,否则为0 |
整数、实数、字符串 |
a!=b |
如果a不等于b,返回1,否则为0 |
整数、实数、字符串 |
a eq b |
如果a等于b,返回1,否则为0 |
字符串 |
a ne b |
如果a不等于b,返回1,否则为0 |
字符串 |
a&b |
按位与 |
整数 |
a^b |
按位异或 |
整数 |
a|b |
按位或 |
整数 |
a&&b |
逻辑与 |
整数、实数 |
a||b |
逻辑或 |
整数、实数 |
a?b:c |
选择,如果a非零则b,否则c |
整数、实数 |
文章评论(0条评论)
登录后参与讨论